0
我遇到以下属性std::vector
,我不知道,我在想是否有人能为我澄清它。vector push_back zero into empty vector
我觉得这代码:
int main()
{
int i = 5;
vector<int> vector;
while(i > 0){
vector.push_back(i);
--i;
}
}
应该产生一个向量包含下列元素:
5, 4, 3, 2, 1
然而,当我运行上面我所得到的代码是:
5, 4, 3, 2, 0
为了探索发生了什么,我在每个阶段打印了矢量,我得到以下序列:
- I = 5 - 矢量(0)
- i = 4的 - 矢量(5,0)
- I = 3 - 矢量(5,4,0)
- I = 2 - 矢量(5,4,3,0)
- I = 1 - 矢量(5,4,3,2,0)
因此,我认为在某种程度上一个零被在第一push_backed周期(其中5应该是),这是非常奇怪的。如果我尝试更大一些(比如说n = 10),那么最后一个元素在每个时间周期都会被修改。
我不明白发生了什么事。我的猜测是,缓冲区中有某种东西可能会在5之前推回来,然后这会使推回和周期失调。或者是别的什么?
编辑:
所以人们亲切地注释中的错误是在我使用了打印程序指出-or本条所适用的。备案是:
void print_vector(std::vector<int> vector){
cout << string(10, '-') << endl;
cout << "(";
for(int i=0; i < vector.size() - 1; ++i){
cout << vector[i] << ", ";
}
cout << vector[vector.size()];
cout << ")" << endl;
}
而且错误来自哪个做奇怪的事情了vector[vector.size()]
当向量没有我想的元素。
你能向我们展示打印代码吗? MVCE将是理想的。 – Erbureth 2014-10-28 16:57:45
这不是你正在运行的代码。请参阅:http://ideone.com/b1qxSV – BartoszKP 2014-10-28 16:58:19
[适用于我](http://ideone.com/lcCxgb)如果我添加代码以在每个阶段打印矢量。请添加您用于打印的代码,以制作完整的测试用例。 – 2014-10-28 16:59:45