Я хочу построить вложенные петли над массивами объектов, имея довольно сложную структуру данных. Поскольку я использую массивы, я хочу использовать их итераторы. После того, как я получил неожиданные результаты, которые я сводились проблему в следующем фрагменте кода, который показывает мои итераторы быть равны, когда я ожидаю, что они разные:Вложенный цикл итератора, почему итераторы равны? - C++
vector<int> intVecA;
vector<int> intVecB;
intVecA.push_back(1);
intVecA.push_back(2);
intVecB.push_back(5);
intVecB.push_back(4);
Foo fooOne(intVecA);
Foo fooTwo(intVecB);
vector<int>::const_iterator itA = fooOne.getMyIntVec().begin();
vector<int>::const_iterator itB = fooTwo.getMyIntVec().begin();
cout << "The beginnings of the vectors are different: "
<< (fooOne.getMyIntVec().begin() == fooTwo.getMyIntVec().begin()) << endl;
cout << (*(fooOne.getMyIntVec().begin()) == *(fooTwo.getMyIntVec().begin())) << endl;
cout << (&(*(fooOne.getMyIntVec().begin())) == &(*(fooTwo.getMyIntVec().begin()))) << endl;
cout << "But the iterators are equal: "
<< (itA==itB) << endl;
Это дает:
The beginnings of the vectors are different: 0
0
0
But the iterators are equal: 1
Такое поведение не имеет смысла для меня, и я был бы рад услышать объяснение.
Foo представляет собой простой объект, содержащий вектор и функцию геттер для него:
class Foo {
public:
Foo(std::vector<int> myIntVec);
std::vector<int> getMyIntVec() const {
return _myIntVec;
}
private:
std::vector<int> _myIntVec;
};
Foo::Foo(std::vector<int> myIntVec) {
_myIntVec = myIntVec;
}
При первом копировании векторов проблема исчезает. Зачем?
vector<int> intVecReceiveA = fooOne.getMyIntVec();
vector<int> intVecReceiveB = fooTwo.getMyIntVec();
vector<int>::const_iterator newItA = intVecReceiveA.begin();
vector<int>::const_iterator newItB = intVecReceiveB.begin();
cout << "The beginnings of the vectors are different: "
<< (intVecReceiveA.begin() == intVecReceiveB.begin()) << endl;
cout << "And now also the iterators are different: "
<< (newItA==newItB) << endl;
производит:
The beginnings of the vectors are different: 0
And now also the iterators are different: 0
Дополнительные примечания: мне нужны эти вложенные циклы в функциях, которые должны быть чрезвычайно эффективными в отношении времени вычислений, поэтому я не хотел бы делать ненужных операций. Поскольку я новичок в C++, я не знаю, действительно ли копирование векторов займет дополнительное время или же они будут копироваться внутри страны в любом случае. Я также благодарен за любые другие советы.
«Я не знаю, действительно ли копирование векторов займет дополнительное время» - да, это будет. –