C ++ vector - push_back

时间:2011-01-31 10:58:10

标签: c++ vector push-back

在C ++入门手册第3章中,有以下for循环将向量中的元素重置为零。

vector<int> ivec; //UPDATE: vector declaration
for (vector<int>::size_type ix = 0; ix ! = ivec.size(); ++ix)
ivec[ix] = 0;

for循环是否真的为元素分配了0值,还是我们必须使用push_back函数?

那么,以下是否有效?

ivec[ix] = ix;

感谢。

5 个答案:

答案 0 :(得分:4)

  

for循环真的分配0   元素的价值?或者,我们必须   使用push_back finction?

ivec[ix] =0更新向量中现有元素的值,而push_back函数向向量添加新元素!

  

那么,以下是否有效?
  ivec [ix] = ix;

完全有效 IF ix < ivec.size()

如果使用iterator而不是索引会更好。像这样,

int ix = 0;
for(vector<int>::iterator it = ivec.begin() ; it != ivec.end(); ++it)
{ 
     *it = ix++; //or do whatever you want to do with "it" here!
}

iterator与STL一起使用是惯用的。首选迭代器而不是索引!

答案 1 :(得分:2)

是的,您可以使用方括号来检索和覆盖矢量的现有元素。但是请注意,您不能使用方括号将新元素插入到向量中,实际上索引超过向量的末尾会导致未定义的行为,通常会使程序彻底崩溃。

要增长向量,可以使用push_back,insert,resize或assign函数。

答案 2 :(得分:0)

使用数组括号,矢量对象的行为与任何其他简单数组一样。 push_back()将其长度增加一个元素,并将新/最后一个设置为您传递的值。

答案 3 :(得分:0)

这个for循环的目的是迭代向量的元素。 从元素x开始(当ix为0时)直到最后一个元素(当ix是ivec.size()-1时)。

在每次迭代中,向量的当前元素设置为9。 这就是声明

ivec[ix] = 0;

一样。把

ivec[ix] = ix;
for循环中的

会将向量的所有元素设置为它们在向量中的位置。即,第一个元素的值为零(向量从0开始索引),第二个元素的值为1,依此类推。

答案 4 :(得分:0)

是的,假设ix是一个有效的索引,很可能:你有一个int的向量,索引是size_type。当然,您可能希望有时存储-1以显示无效索引,因此将unsigned转换为signed是合适的,但我建议使用static_cast。

执行您正在执行的操作(将向量中的每个值设置为其索引)是一种创建其他集合的索引的方法。然后根据其他集合的谓词重新排列矢量排序。

假设您永远不会溢出(如果您的系统是32位或更多,则极不可能),您的转换应该有效。