草庐IT

stdvector

全部标签

c++ - 如何在构造时为 std::vector 保留内存?

通常我在构造std::vector后立即调用reserve。这通常不会导致std::vector的现有堆分配被破坏并替换为新的吗?有没有办法在构建时保留内存而不是分配堆空间然后立即销毁它?或者std::vector中是否有实现技巧来确保这不是问题?可用的构造函数似乎只能用于用值填充std::vector,而不是显式保留空间。 最佳答案 您的问题基于一个错误的前提,即默认构造的std::vector将执行[零长度]分配。实际上没有理由这样做。一个新的vector应该有zero的容量(尽管这是理智所要求的,而不是标准所要求的)。因此,您

c++ - 如何在构造时为 std::vector 保留内存?

通常我在构造std::vector后立即调用reserve。这通常不会导致std::vector的现有堆分配被破坏并替换为新的吗?有没有办法在构建时保留内存而不是分配堆空间然后立即销毁它?或者std::vector中是否有实现技巧来确保这不是问题?可用的构造函数似乎只能用于用值填充std::vector,而不是显式保留空间。 最佳答案 您的问题基于一个错误的前提,即默认构造的std::vector将执行[零长度]分配。实际上没有理由这样做。一个新的vector应该有zero的容量(尽管这是理智所要求的,而不是标准所要求的)。因此,您

c++ - move std::vector 时是否需要保留容量?

考虑以下代码:std::vectorvec;vec.reserve(500);size_tcap=vec.capacity();std::vectornewVec=std::move(vec);assert(cap==newVec.capacity());在您遇到的几乎任何实现中,这都会起作用。我不在乎实现是做什么的。我想知道标准需要什么。move到vector的容量是否与原始容量相同?还是断言会触发? 最佳答案 从标准来看,move构造函数似乎不需要任何东西,但是正如@amaurea所说,如果move构造函数尝试分配或释放内存,它

c++ - move std::vector 时是否需要保留容量?

考虑以下代码:std::vectorvec;vec.reserve(500);size_tcap=vec.capacity();std::vectornewVec=std::move(vec);assert(cap==newVec.capacity());在您遇到的几乎任何实现中,这都会起作用。我不在乎实现是做什么的。我想知道标准需要什么。move到vector的容量是否与原始容量相同?还是断言会触发? 最佳答案 从标准来看,move构造函数似乎不需要任何东西,但是正如@amaurea所说,如果move构造函数尝试分配或释放内存,它

c++ - std::vector 作为模板函数参数

我想创建一个将std::vector引用作为参数的类方法,并且我想将它用于不同类型的数据。函数应该如下所示:voidsome_function(conststd::vector&vect){//dosomethingwithvector}我想用它来举例:std::vectorv1;some_function(v1);std::vectorv2;some_function(v2);我希望我的观点很清楚。我是否必须制作这样的模板方法:templatevoidsome_function(std::vector&vect){}或者我可以用其他方式吗?如果必须,请告诉我如何在类里面编写该方法。感

c++ - std::vector 作为模板函数参数

我想创建一个将std::vector引用作为参数的类方法,并且我想将它用于不同类型的数据。函数应该如下所示:voidsome_function(conststd::vector&vect){//dosomethingwithvector}我想用它来举例:std::vectorv1;some_function(v1);std::vectorv2;some_function(v2);我希望我的观点很清楚。我是否必须制作这样的模板方法:templatevoidsome_function(std::vector&vect){}或者我可以用其他方式吗?如果必须,请告诉我如何在类里面编写该方法。感

c++ - 将字符串解析为 int 的 vector

我有一个字符串,其中包含一些用空格分隔的整数。例如stringmyString="10152023";我想将其转换为整数vector。所以在例子中vector应该相等vectormyNumbers={10,15,20,23};我该怎么做?对不起,愚蠢的问题。 最佳答案 您可以使用std::stringstream.您将需要#include除了其他包括。#include#include#includestd::stringmyString="10152023";std::stringstreamiss(myString);intnum

c++ - 将字符串解析为 int 的 vector

我有一个字符串,其中包含一些用空格分隔的整数。例如stringmyString="10152023";我想将其转换为整数vector。所以在例子中vector应该相等vectormyNumbers={10,15,20,23};我该怎么做?对不起,愚蠢的问题。 最佳答案 您可以使用std::stringstream.您将需要#include除了其他包括。#include#include#includestd::stringmyString="10152023";std::stringstreamiss(myString);intnum

c++ - 为什么 std::vector 是连续的?

除了标准定义它是连续的,为什么std::vector是连续的?如果空间不足,则需要重新分配一个新block并将旧block复制到新block,然后再继续。如果不是连续的怎么办?当存储填满时,它只会分配一个新block并保留旧block。通过迭代器访问时,它会执行简单的>、这真的会工作/更好吗?还是我错过了什么? 最佳答案 如果std::vector不能保证连续性,则会发明一个新的容器来保证连续性。连续性保证使得与期望连续数组的现有代码进行互操作变得更容易,并且还提供了非常好的性能,因为它是缓存友好的。(因此,对于中等大小,在中间插入

c++ - 为什么 std::vector 是连续的?

除了标准定义它是连续的,为什么std::vector是连续的?如果空间不足,则需要重新分配一个新block并将旧block复制到新block,然后再继续。如果不是连续的怎么办?当存储填满时,它只会分配一个新block并保留旧block。通过迭代器访问时,它会执行简单的>、这真的会工作/更好吗?还是我错过了什么? 最佳答案 如果std::vector不能保证连续性,则会发明一个新的容器来保证连续性。连续性保证使得与期望连续数组的现有代码进行互操作变得更容易,并且还提供了非常好的性能,因为它是缓存友好的。(因此,对于中等大小,在中间插入