Проверьте, равны ли два вектора
Как проверить, равны ли первые "n" из двух векторов?
Я попробовал следующее:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
typedef vector<double> v_t;
int main(){
v_t v1,v2;
int n = 9;
for (int i = 1; i<10; i++){
v1.push_back(i);
v2.push_back(i);
}
v1.push_back(11);
v2.push_back(12);
if (v1.begin()+n == v2.begin()+n)
cout << "success" << endl;
else
cout << "failure" << endl;
}
Почему он печатает "сбой", а не "успех"?
Ответы
Ответ 1
Используйте std::equal
из заголовка <algorithm>
:
if (std::equal(v1.begin(), v1.begin() + n, v2.begin())
std::cout << "success" << std::endl;
Обратите внимание, что оба вектора должны содержать не менее n
элементов. Если один из них слишком короткий, поведение вашей программы будет undefined.
Если вы хотите проверить, равен ли весь вектор другому, просто сравните их, как если бы вы сравнили все остальное:
if (v1 == v2)
Ваш (неудачный) код сравнивал итератор одного вектора с итератором другого. Итераторы равных векторов не равны. Каждый итератор привязан к последовательности, которую он итерирует, поэтому итератор из одного вектора никогда не будет равен итератору другого.
Ответ 2
Самый простой (с точки зрения наименьшего количества не-повседневных функций для поиска) способ сравнения двух состоит в следующем:
bool are_equal = true;
for (int i = 0; i < first_how_many; i++)
if (v1[i] != v2[i])
{
are_equal = false;
break;
}
Он будет делать то же самое, но если вы предпочитаете, вы можете использовать функцию <algorithm>
header std::equal
: http://www.cplusplus.com/reference/algorithm/equal/