我可以比较指向同一容器的2个迭代器吗?

时间:2015-10-06 11:25:23

标签: c++ iterator

我有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
.......

1 个答案:

答案 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)