Подтвердить что ты не робот

Проверьте, равны ли два вектора

Как проверить, равны ли первые "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;
}

Почему он печатает "сбой", а не "успех"?

4b9b3361

Ответ 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/