矢量擦除功能不起作用c ++

时间:2013-09-06 21:29:54

标签: c++ vector

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

所以这里有细节:我创建了一个名为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();
    }
}

为了方便起见,我没有包含我从文件中读取数据的构造函数,也没有将项目添加到向量中的方法。如果您还有其他需要,请随时与我们联系。

1 个答案:

答案 0 :(得分: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();
    }
}