2015-10-06 79 views
3

我有2個迭代器指向相同的容器列表。我可以比較它們嗎? 我做以下,並得到錯誤:列表迭代不相容我可以比較指向同一個容器的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 
....... 

回答

4

你傳遞nativeswap的價值。這意味着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) 
相關問題