我是C ++中的新手,在按照矢量教程后,我编写了如下程序:
int main()
{
vector<int> regular;
vector<int> large;
int n;
do{
cout << "Enter a number : " ;
cin >> n;
regular.push_back(n); //add the number to the vector
}while (n!=0);
for(int i = 0; i<regular.size(); i++){
// this is to test if each value is larger than x
if(largevalues(regular[i]))
{
large.push_back(regular[i]);
cout<< large[i] <<endl;
}
}
return 0;
}
但是,像1, 2, 3, 4, 5 , 6, 7
这样的输入的输出并不像预期的那样。它会打印一些奇怪的值。
如果不是
large.push_back(regular[i]);
cout<< large[i] <<endl;
我只是做
cout<< regular[i] <<endl;
然后它将打印所有大于x的数字。有人可以解释为什么large.push_back(regular[i]);
不会将这些值添加到新的向量中吗?
答案 0 :(得分:2)
regular[i]
不一定与..
相同 large[i]
push_back
的内容
例如,如果常规大小为10,则大小为1
然后,你将常规的第10个索引推回到大并试图访问large[10]
...你将有一个索引超出界限问题
如果你想看到刚推回的东西的价值,你可以说cout<< large.back() <<endl;
答案 1 :(得分:1)
看起来你在最后一个循环中对大型和常规使用相同的索引。尝试:
int j = 0;
for(int i = 0; i<regular.size(); i++){
// this is to test if each value is larger than x
if(largevalues(regular[i]))
{
large.push_back(regular[i]);
cout<< large[j++] <<endl;
}
}