0

我在使用矢量擦除功能时遇到了奇怪的问题。我想做的就是擦除向量的第一个元素。

所以这里是细节:我创建了一个名为 cv 的对象指针。在这个对象指针的类中,有一个称为 v 的整数向量。它有一个数字列表。

该对象指针旨在复制传送带的影响。我想做的一件事就是向前移动皮带。这意味着,就向量而言,删除顶部位置的数字。

为此,我编写v.erase(v.begin())了负责将皮带向前移动的方法。但是当我运行它时,它不起作用。我陷入了一个无限循环,我一直在看同一个项目。

然后我尝试v.erase(0)了,但这仍然没有用。我尝试从范围中删除,但即使这样也行不通。奇怪的是,我可以毫无问题地添加到向量中,并在其中查找项目。我只是无法删除。任何帮助表示赞赏。如果您需要我提供更多信息,请告诉我。

以下是一些相关代码:

class Belt()
{
vector<int> v;
public:
void MoveBelt();
};

void Belt::MoveBelt()
{
    v.erase(v.begin());
}

int main()
{ 
    char filename[256];
    Belt *cc = new Belt(filename);

    if(condition met)
    {
       cc->MoveBelt();
    }
}

为了方便起见,我没有包含我从文件中读取数据的构造函数,也没有包含我将项目添加到向量的方法。请看一下,如果您需要其他任何东西,请告诉我。

4

1 回答 1

0

下面是一个完整的例子,证明v.erase(v.begin());确实有效。基于此,我猜您的条件已损坏。顺便说一句,你为什么要在堆上分配对象?似乎没有必要这样做。

#include <algorithm>
#include <initializer_list>
#include <iostream>
#include <iterator>
#include <vector>

class Belt
{
    std::vector<int> v;
 public:
    Belt(std::initializer_list<int> list): v(list.begin(), list.end()) {}
    bool empty() const { return v.empty(); }
    std::vector<int>::const_iterator begin() const { return v.begin(); }
    std::vector<int>::const_iterator end() const { return v.end(); }
    void MoveBelt();
};

std::ostream& operator<< (std::ostream& out, Belt const& belt)
{
    std::copy(belt.begin(), belt.end(),
              std::ostream_iterator<int>(std::cout << '[', " "));
    return out << ']';
}

void Belt::MoveBelt()
{
    v.erase(v.begin());
}

int main()
{ 
    Belt cc{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    while (!cc.empty()) {
        std::cout << cc << "\n";
        cc.MoveBelt();
    }
}
于 2013-09-06T22:13:07.500 回答