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

时间:2018-05-29 21:33:39

标签: c++

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

2 个答案:

答案 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 < 5v.size())并通过1增加i来完成它的事情。 。因此,第二次迭代期间的比较评估为1

然后,它以类似的方式继续向无限远(或直到你杀死它)。

答案 1 :(得分:0)

@juanchopanza“即使是这样,UB仍然可以让您陷入无限循环。” -UB的工作方式不是。如果程序具有UB anywhere ,则 entire 程序无效,并且 any 行为正常。按照您的意图进行操作,无限循环,崩溃,格式化硬盘。一切都是程序调用UB的结果。