使用迭代器时遇到问题,每M次传递都会擦除一个向量项

时间:2018-02-02 10:05:25

标签: c++ vector iterator stdvector

我在实现矢量方面遇到了一些问题。我正在尝试制作的程序如下:获取用户定义的“大小”值并创建该大小的“循环”向量。然后它接收另一个整数变量,表示在从向量中删除项目之前必须发生多少循环迭代。在我的代码中,我试图遍历这个“Person”对象的向量(一个基本类,其唯一的私有数据成员是一个表示位置的整数)。声明此“runProgram”函数的类具有person对象矢量的私有数据成员,然后是表示圆形大小的三个整数,消除前的遍数,以及向量中的项目数。我做了一个while循环来执行这个过程。但是,每次运行此程序时,程序似乎只通过循环一次,然后删除所有内容......或者只是不继续。以下是我的一些代码:

主循环:

enter cod int VectorMyJosephus::runProgram(){
int n = 0;
int m = 0;

cout << "How many people would you like in the circle?" << endl;
cin >> n;
cout << "How many passes would you like ther to be before someone is eliminated?" << endl;
cin >> m;

init(n, m);

vector<Person>::iterator iter;
iter = circ.begin();
int count = 0;

while (circ.size() > 1)
{
    //count the current person
    count += 1;
    iter->print();

    //remove every "M" person
    if (count == M)
    {
        iter = circ.erase(iter);
        count = 0;
        size -= 1;
        /*printAll();
        system("PAUSE");*/
    }
    else
    {
        //contine through the list once someone was removed
        ++iter;
    }

    if (iter == circ.end())
    {
        iter = circ.begin();
    }


    cout << "The position of the only remaining person is: " << iter->getPosition() << "\n" << endl;
    cout << circ.size() << endl;


    return 0;

}

}这里

这是我的初始化函数,它应该用person对象填充向量:

   void VectorMyJosephus::init(int N, int M)
{
    this->setN(N);
    this->setM(M);
    this->setSize(N);
    for (int i = 0; i < N; i++)
    {
        Person pers;
        pers.setPosition(i);
        circ.push_back(pers);
    }
}

我是初学者,所以非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

你的while循环中有return 0,这会立即中断循环执行。