C ++中的向量是否有memset
的等效函数?
(非clear()
或erase()
方法,我想保留向量的大小,我只想初始化所有值。)
答案 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));