我刚开始学习C ++。所以,我无法弄清楚为什么向量成员函数不会将值插入向量。
int main (){
vector<char> v(5);
char x = 'a';
for (int i = 0; i < v.size(); ++i) {
v.push_back(x);
++x;
}
for (int i = 0; i < v.size(); ++i)
cout << v[i];
keep_window_open();
return 0;
}
答案 0 :(得分:4)
我无法弄清楚为什么vector成员函数不会将值插入vector
它确实在事实中插入了值。由于循环,执行只是没有达到vector
内容的打印:
for (int i = 0; i < v.size(); ++i) {
v.push_back(x);
++x;
}
是无限的。
在第一次迭代之前v.size()
返回5
(因为这是元素的数量,构造了向量),因此第一次迭代期间的i < v.size()
求值为{{1 }}
循环,然后通过将元素插入向量(在过程中增加0 < 5
到v.size()
)并通过1
增加i
来完成它的事情。 。因此,第二次迭代期间的比较评估为1
。
然后,它以类似的方式继续向无限远(或直到你杀死它)。
答案 1 :(得分:0)
@juanchopanza“即使是这样,UB仍然可以让您陷入无限循环。” -UB的工作方式不是。如果程序具有UB anywhere ,则 entire 程序无效,并且 any 行为正常。按照您的意图进行操作,无限循环,崩溃,格式化硬盘。一切都是程序调用UB的结果。