矢量C ++上的Memset

时间:2009-11-03 03:13:13

标签: c++ vector

C ++中的向量是否有memset的等效函数?

(非clear()erase()方法,我想保留向量的大小,我只想初始化所有值。)

5 个答案:

答案 0 :(得分:75)

使用std::fill()

std::fill(myVector.begin(), myVector.end(), 0);

答案 1 :(得分:25)

如果您的向量包含POD类型,则可以安全地使用memset - 保证向量的存储是连续的。

memset(&vec[0], 0, sizeof(vec[0]) * vec.size());

修改:抱歉向您抛出一个未定义的术语 - POD代表Plain Old Data,即C中可用的类型以及从它们构建的结构。

再次编辑:正如评论中所指出的,即使bool是一种简单的数据类型,vector<bool>也是一个有趣的例外,如果您尝试使用memset就可以了。 Adam Rosenfield's answer在这种情况下仍然可以正常运作。

答案 2 :(得分:2)

另一种方式,我想我在迈耶斯的书中首先看到了它:

// Swaps with a temporary.
vec.swap( std::vector<int>(vec.size(), 0) );

唯一的缺点是它会复制。

答案 3 :(得分:0)

您可以在向量中使用assign方法:

为向量分配新内容,替换其当前内容,并相应地修改其大小(如果不更改向量大小,只需传递vec.size()即可)。

例如:

vector<int> vec(10, 0);
for(auto item:vec)cout<<item<<" ";
cout<<endl;
// 0 0 0 0 0 0 0 0 0 0 

// memset all the value in vec to 1,  vec.size() so don't change vec size
vec.assign(vec.size(), 1); // set every value -> 1

for(auto item:vec)cout<<item<<" ";
cout<<endl;
// 1 1 1 1 1 1 1 1 1 1

引用: http://www.cplusplus.com/reference/vector/vector/assign/

答案 4 :(得分:0)

m= 行数 && n== 列数

vector<vector<int>> a(m,vector<int>(n,0));