-3

私は比較的経験豊富なプログラマーであり、クラスのC++レビューに戻ってきます。比較的単純なC++プログラムをいくつか作成するという課題があります。私が慣れていない奇妙なエラーが発生しましたが、それはこのコミュニティの子供の遊びだと確信しています。

int pull_next_element (int r, std::vector<int>& sequence) {
    int x = sequence[0];
    sequence.erase(sequence.begin());  //orig: sequence.erase(0);
    return x;
}

私が得ていたエラー:

Error C2664: 'std::_Vector_iterator<_Myvec> std::vector<_Ty>::erase(std::_Vector_const_iterator<_Myvec>)' : cannot convert parameter 1 from 'int' to 'std::_Vector_const_iterator<_Myvec>'

編集:数値インデックスの代わりにイテレータに置き換えられました。それ以外の場合は、コード全体でこの問題が修正されました。みんな、ありがとう。

4

2 に答える 2

3

http://www.cplusplus.com/reference/stl/vector/erase/

// erasing from vector
#include <iostream>
#include <vector>
using namespace std;

int main ()
{
  unsigned int i;
  vector<unsigned int> myvector;

  // set some values (from 1 to 10)
  for (i=1; i<=10; i++) myvector.push_back(i);

  // erase the 6th element
  myvector.erase (myvector.begin()+5); // <====================================================

  // erase the first 3 elements:
  myvector.erase (myvector.begin(),myvector.begin()+3);// <====================================


  cout << "myvector contains:";
  for (i=0; i<myvector.size(); i++)
    cout << " " << myvector[i];
  cout << endl;

  return 0;
}
于 2012-07-22T12:32:03.900 に答える
1

'sequence'のvalue引数の代わりに参照引数を使用する必要があります。そうしないと、消去が役に立たなくなります。

int pull_next_element (int r, std::vector<int>& sequence) 
于 2012-07-22T13:28:36.347 に答える