我在矢量擦除功能方面遇到了奇怪的问题。我想做的就是擦除矢量的第一个元素。
所以这里有细节:我创建了一个名为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();
}
}
为了方便起见,我没有包含我从文件中读取数据的构造函数,也没有将项目添加到向量中的方法。如果您还有其他需要,请随时与我们联系。
答案 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();
}
}