我有2个迭代器指向同一个容器列表。我能比较一下吗? 我执行以下操作并获得错误:列出迭代器不兼容
std::list<char>::iterator it=native.begin();
std::advance(it, 3);
std::list<char>::iterator it2=native.begin();
std::advance(it2, 9);
swap(native, it, 3, it2, 7);
.......
void swap(std::list<char> native,
std::list<char>::iterator place1,
size_t len1,
std::list<char>::iterator place2,
size_t len2)
{
std::list<char> swap1, swap2;
std::list<char>::iterator it = native.begin();
while (it != native.end()) {
if (it == place1) { // here i get error
.......
答案 0 :(得分:3)
您按价值将native
传递到swap
。这意味着swap
获得了自己的native
副本,而迭代器传递到原来的那个。因此不相容。
通过引用传递native
:
void swap(std::list<char> &native,
std::list<char>::iterator place1,
size_t len1,
std::list<char>::iterator place2,
size_t len2)
我不知道函数的语义;但如果它不修改native
,则通过const引用传递它:
void swap(const std::list<char> &native,
std::list<char>::iterator place1,
size_t len1,
std::list<char>::iterator place2,
size_t len2)