在 C++ Primer 一书的第 (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 函数?
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!
}
使用iteratorwith 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 以显示无效索引,因此将无符号转换为有符号是合适的,但我建议使用 static_cast。
做你正在做的事情(将向量中的每个值设置为其索引)是一种创建其他集合索引的方法。然后,您根据另一个集合的预测重新排列您的向量排序。
假设您永远不会溢出(如果您的系统是 32 位或更多,则极不可能)您的转换应该可以工作。