检查矢量项并在C ++中添加到新矢量

时间:2015-02-22 02:00:48

标签: c++ vector

我是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]);不会将这些值添加到新的向量中吗?

2 个答案:

答案 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;
  }
}