Утверждение, которое вы получаете несовместимые векторные итераторы указывает, что вы пытаетесь сравнить итераторы из разных векторов.
Обычно вы можете получить их по
ВОЗМОЖНОСТЬ 1
std::vector<int> foo( 100 );
std::vector<int> bar( 100 );
for( std::vector<int>::iterator iter = foo.begin();
iter != bar.end();
++iter )
{
std::cout << *iter;
}
Обратите внимание на приведенный выше код, и вы заметите, что я сравниваю iter, который является итератором с foo vector
до bar.end()
ВОЗМОЖНОСТЬ 2
Еще один способ получить ту же ошибку - привязать недействительных итераторов.
std::vector<int> foo( 3 );
std::vector<int>::iterator enditer = foo.end();
foo.push_back( 3 );
foo.push_back( 3 );
foo.push_back( 3 ); // can invalidate endIter above
for( std::vector<int>::iterator iter = foo.begin();
iter != enditer;
++iter )
{
std::cout << *iter;
}
Обратите внимание, как в приведенном выше коде я завис за endIter , который можно сделать недействительным, добавив дополнительные элементы к foo