生锈/初学者C++编译器错误

Rusty/Beginner C++ compiler error

本文关键字:编译器 错误 C++ 初学者 生锈      更新时间:2023-10-16

我是一个相对有经验的程序员,回来复习一个类的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>'

EDIT:用迭代器代替了数字索引,并在整个代码中解决了这个问题。谢谢大家。

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

您应该使用引用参数而不是'sequence'的值参数,否则您的擦除将毫无用处。

int pull_next_element (int r, std::vector<int>& sequence)