【发布时间】:2021-10-02 03:16:05
【问题描述】:
我有一个自定义类MyData。
class MyData
{
private:
int data;
public:
int getData() const
{
return data;
}
MyData(int val)
: data(val)
{
cout << "Constructor invoked" << endl;
}
MyData(const MyData& other)
{
cout << "Copy constructor invoked" << endl;
data = other.data;
}
MyData& operator =(const MyData& other)
{
cout << "Assignment operator invoked" << endl;
data = other.data;
return *this;
}
friend ostream& operator<<(ostream& os, const MyData& d)
{
cout << "<< operator overloaded" << endl;
os << d.data;
return os;
}
};
在我的 main 函数中,我有
list<MyData> data2{ 12,21,32,113,13,131,31 };
我希望我的迭代器指向第 4 个元素,让我们直接说,而不是每次都进行增量 ++ 操作。
我该怎么做?
list<MyData>::iterator it = data2.begin();
it += 4; // error since I cannot increment this???-compile time error.
我就是这样-
it++; it++; it++; it++;
让迭代器直接指向第4个元素的正确方法是什么?
我尝试使用像 std::advance(data2.begin(),3); 这样的提前。但是,这会引发错误提示
error: cannot bind non-const lvalue reference of type ‘std::_List_iterator<MyData>&’ to an rvalue of type ‘std::__cxx11::list<MyData>::iterator’ {aka ‘std::_List_iterator<MyData>’}
data1.splice(it, data2,advance(data2.begin(),3),data2.end()); //splice transfer range.
基本上,我这样做是为了将另一个列表与一个元素或某个时间范围拼接起来。
【问题讨论】:
-
不幸的是,
std::list迭代器是 bidirectional iterators,它不支持任意添加或从中减去值。为此,您需要一个 random access iterator,(就像您可以从std::vector获得的一样)。
标签: c++ class iterator c++-standard-library stdlist