为什么push_back函数不会将值插入到具有定义大小的向量中

why won't push_back function insert values into vector with defined size

本文关键字:定义 向量 插入 back push 函数 为什么      更新时间:2023-10-16

我刚开始学习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;
}

我无法弄清楚为什么向量成员函数不将值插入向量

它确实在事实中插入了值。执行,只是没有达到vector内容的打印,因为循环:

for (int i = 0; i < v.size(); ++i) {
v.push_back(x);
++x;
}

是无限的。

在第一次迭代之前v.size()返回5(因为这是元素的数量,所以向量是用来构造的(,因此第一次迭代期间的i < v.size()计算结果为0 < 5

然后,循环通过将元素插入向量(在此过程中增加v.size()1(并将i增加1来执行其操作。因此,第二次迭代期间的比较计算结果为1 < 6

然后,它以类似的方式继续走向无穷大(或者直到你杀死它(。

@juanchopanza">

即使是这样,UB仍然可以给你留下一个无限循环。如果一个程序在任何地方都有UB,则整个程序都是无效的,任何行为都是可以的。 做你想要的,无限循环,崩溃,格式化你的硬盘。所有这些都是调用 UB 的程序的正常结果。