Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何重置C++;带零的内置向量?_C++_Vector - Fatal编程技术网

C++ 如何重置C++;带零的内置向量?

C++ 如何重置C++;带零的内置向量?,c++,vector,C++,Vector,如果效率是一个问题,我需要向量,我应该使用什么 assert(myVector.size() == wantedSize) memset(&*myVector.begin(),0,myVector.size() * sizeof(T)); myVector.clear(); myVector.resize(wantedSize); myVector.clear(); myVector.assign(wantedSize,0); 我可以假设wantedSize=size()您

如果效率是一个问题,我需要向量,我应该使用什么

assert(myVector.size() == wantedSize)
memset(&*myVector.begin(),0,myVector.size() * sizeof(T)); 

myVector.clear(); 
myVector.resize(wantedSize); 

myVector.clear(); 
myVector.assign(wantedSize,0);
我可以假设wantedSize=size()

您错过了一个:

std::fill(myVector.begin(), myVector.end(), 0);
而不是执行
memset

它是最有效的,因为它不会导致重新分配。不重新分配也意味着不存在迭代器无效,这更安全


std::fill
也是类型安全的,通常推荐用于填充标准容器(不仅仅是
std::vector
!)。也更灵活,因为您可以提供除容器的
值\u类型
之外的另一种类型的值,只要提供的值可以转换为该
值\u类型

就不要为
std::vector
@MM使用
memset
:当您说“不做某事”时,通常解释原因是有意义的。在std::vector的情况下,memset将起作用。然而,混合使用C/C++例程被认为是不好的,并且已经有std::fill.std::vector保证条目是连续的。“除了BOOLS。”LUK32:“是什么让你想到”这是C++标准的要求。继续读吧。C++03中的23.2.4.1。向量的元素是连续存储的,这意味着如果v是一个向量,其中T是bool以外的某种类型,那么它遵循恒等式&v[n]==&v[0]对于所有的0,+n,它的价值,实际上不是由C++标准保证的,所有的内置类型都是零位,它与分配0一样。对于整数类型,它是有保证的,但不是浮点或指针类型。虽然没有保证,但我确信在当前的所有实现中都是正确的,对于浮动类型Y是正确的。如果您的实现使用IEEE 754表示法,您就可以了。不过,除了担心C函数之外,您还有理由更喜欢
fill
而不是
memset
,这是保证正确性的。
clear()
后跟
resize()
assign()
也保证不会导致重新分配,因为
clear()
不会影响容量。当然,它会使迭代器无效。@SteveJessop啊。我明白了。但是一行程序几乎总是比其他解决方案好。-)我承认,实际上是两行。
#include
:P