Другие языки программирования и технологии

[C++] Сравнение векторов. Почему-то работает криво, хотя код простой. Где ошибка?..

Имеются следующие перегрузки.. .

T& operator[]( size_type index );
const T& operator[]( size_type index ) const;
vector operator=(const vector& c2);
bool operator==(const vector& c1, const vector& c2);
bool operator!=(const vector& c1, const vector& c2);
bool operator<(const vector& c1, const vector& c2);
bool operator>(const vector& c1, const vector& c2);
bool operator<=(const vector& c1, const vector& c2);
bool operator>=(const vector& c1, const vector& c2);

Пользуйтесь!

#include <iostream>
#include <vector>
using namespace std;

int main()
{
vector<long> vector1,vector2;

for (long n = 0; n <= 10; n++)
{
vector1.push_back(n * 2);
vector2.push_back(n * 2);
}
if (!vector1.empty())
{
if (vector1 == vector2) cout << "vector1 == vector2" << endl;
else cout << "vector1 != vector2" << endl;
}
vector2.pop_back(); // Удалили последний элемент из вектора
if (!vector1.empty())
{
if (vector1 == vector2) cout << "vector1 == vector2" << endl;
else cout << "vector1 != vector2" << endl;
}
cin.get();
return 0;
}
БГ
Братья Грим
94 638
Лучший ответ
Дмитрий Ворончихин Николай, этот код у Вас выводит что они равны? Если так - значит, интерпретатор (да, именно он) - имеет дыру и дело в нем.
а как вы понимаете выражение вот это?
vector1 == vector2
как происходит сравнение векторов в с++? где-то за кадром сравниваются соответствующие элементы векторов? ну и что с этого? это два разных объекта содержащих одинаковую информацию, но указывающих на разные места в памяти...
Jumakhan Taytelov
Jumakhan Taytelov
85 842
Этот вектор - это не луч, выходящий из точки А и попадающий в точку В, а вообще-то массив. Массивы так не сравнивают.
Денис Поправко
Денис Поправко
69 436
Это
if (vector1 == vector2)
сравнение указателей на вектора, а не векторов
(если где-то внутри библиотек оператор "==" не переопределён)
>Это
>if (vector1 == vector2)
>сравнение указателей на вектора, а не векторов
Каких к черту указателей?

#include <algorithm>
..
if (V1.size() == V2.size() && equal(V1.begin(), V1.end(), V2.begin()))
cout << "равны";
Вова Борисов
Вова Борисов
5 079
Почему-то работает криво, хотя код простой. Где ошибка?. .

> это два разных объекта содержащих одинаковую информацию, но указывающих на разные места в памяти.. .

...

> сравнение указателей на вектора, а не векторов

...

> Этот вектор - это не луч, выходящий из точки А и попадающий в точку В, а вообще-то массив. Массивы так не сравнивают.

Все вышепроцитированное - это бред, не имеющий к вопросу ни малейшего отношения. Насчет "луча" - это вообще какой-то шедевр потока сознания (((((((Ж

при подключении заголовочного файла <vector> становится доступным перегруженный оператор сравнения.

если у тебя не работает, значит у тебя поддельный компилятор, который только притворяется, будто понимает C++
Andrei Pudov
Andrei Pudov
1 769