如何用零重置内置函数的C++向量?

jim*_*iki -1 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);
Run Code Online (Sandbox Code Playgroud)

我可以假设wantSize = size()

Mar*_*cia 7

你错过了一个:

std::fill(myVector.begin(), myVector.end(), 0);
Run Code Online (Sandbox Code Playgroud)

而不是做memset.

它是最有效的,因为它不会导致重新分配.没有重新分配也意味着没有迭代器失效,这是IMO更安全.

std::fill也是类型安全的,通常建议用于填充标准容器(不仅仅是std::vector!).还可以更灵活,value_type因为只要提供的值可以转换为容器,就可以提供除容器之外的其他类型的值value_type.

  • `clear()`后跟`resize()`或`assign()`也保证不会导致重新分配,因为`clear()`不会影响容量.当然,它确实使迭代器无效. (3认同)