我遇到了我不知道的std::vector
的以下属性,我想知道是否有人可以为我澄清它。
我认为这段代码:
int main()
{
int i = 5;
vector<int> vector;
while(i > 0){
vector.push_back(i);
--i;
}
}
应该产生一个包含以下元素的 vector :
5, 4, 3, 2, 1
但是,当我在上面运行代码时,得到的是:
5, 4, 3, 2, 0
为了探究正在发生的事情,我在每个阶段打印了 vector ,然后得到以下序列:
因此,我认为以某种方式在第一个周期(应该为5)中将一个push_backed归零,这很奇怪。如果尝试更大的值(例如n = 10),则每个时间周期都会修改最后一个元素。
我不知道怎么回事。我的猜测是,缓冲区中可能有一些东西会在5点之前被推回,然后这会使推回和循环异相。或者是别的什么?
编辑:
因此,正如人们在注释中所指出或暗示的那样,该错误出在我使用的打印例程中。记录为:
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()]
,当 vector 没有我猜到的元素时,它会做奇怪的事情。
最佳答案
是的,您的错误确实在打印代码中。的
vector[vector.size()]
在C++中,表达式是非法的。 vector 包含范围[0;
vector.size()
),表达式将尝试访问不存在的表达式。 vector 的最后一个元素,这是未定义的行为。
关于c++ - vector push_back零成空 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26614070/