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;
谢谢。     
已邀请:
  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是惯用的。首选迭代器超过索引!     
是的,您可以使用方括号来检索和覆盖向量的现有元素。但请注意,您不能使用方括号将新元素插入到向量中,实际上索引超过向量的末尾会导致未定义的行为,通常会使程序彻底崩溃。 要增长向量,可以使用push_back,insert,resize或assign函数。     
使用数组括号,矢量对象的行为与任何其他简单数组一样。
push_back()
将其长度增加一个元素,并将新/最后一个设置为您传递的值。     
for循环的目的是迭代向量的元素。 从元素x开始(当ix为0时)直到最后一个元素(当ix为ivec.size()-1时)。 在每次迭代时,向量的当前元素设置为9。 这就是声明
ivec[ix] = 0;
确实。把
ivec[ix] = ix;
在for循环中,将向量的所有元素设置为它们在向量中的位置。即,第一个元素的值为零(当向量从0开始索引时),第二个元素的值为1,依此类推。     
是的,假设ix是一个有效的索引,很可能:你有一个int的向量,索引是size_type。当然,您可能希望有时存储-1以显示无效索引,因此将unsigned转换为signed是合适的,但我建议使用static_cast。 做你正在做的事情(将向量中的每个值设置为其索引)是一种创建其他集合的索引的方法。然后,您可以根据其他集合的谓词重新排列矢量排序。 假设您永远不会溢出(如果您的系统是32位或更多,则极不可能),您的转换应该有效。     

要回复问题请先登录注册