C ++ : Сравнение двух векторов

Есть ли способ сравнить два вектора?

if (vector1 == vector2)
    DoSomething();

Примечание: В настоящее время эти векторы не сортируются и содержат целые значения.

68
задан Jonathan Leffler 6 June 2011 в 05:24
поделиться

1 ответ

C++ 11 стандартов на == для std::vector

Другие упомянули , что operator== действительно сравнивает векторное содержание и работы, но здесь кавычка от C++ 11 стандартных проектов N3337, которым я верю, подразумевает это.

Мы сначала смотрим на Главу 23.2.1 "Общие контейнерные требования", который вещи документов, которые должны быть допустимыми для [1 120] весь контейнеры, включая поэтому std::vector.

, Что таблица секторов 96 "Контейнерные требования", который содержит запись:

Expression   Operational semantics
===========  ======================
a == b       distance(a.begin(), a.end()) == distance(b.begin(), b.end()) &&
             equal(a.begin(), a.end(), b.begin())

distance часть семантики означает, что размер обоих контейнеров является тем же, но указал в обобщенном итераторе дружественный путь к не произвольный доступ адресуемые контейнеры. distance() определяется при 24.4.4 "Операциях итератора".

Затем ключевой вопрос - то, что делает equal() средний. В конце таблицы мы видим:

Примечания: равный алгоритм () определяется в Пункте 25.

и в разделе 25.2.11 "Равных", мы находим его определение:

template<class InputIterator1, class InputIterator2>
bool equal(InputIterator1 first1, InputIterator1 last1,
           InputIterator2 first2);

template<class InputIterator1, class InputIterator2,
class BinaryPredicate>
bool equal(InputIterator1 first1, InputIterator1 last1,
           InputIterator2 first2, BinaryPredicate pred);

1 Возврат: верный, если для каждого итератора i в диапазоне [first1,last1) следующие соответствующие условия содержат: *i == *(first2 + (i - first1)), pred(*i, *(first2 + (i - first1))) != false. Иначе, возвращает false.

В нашем случае, мы заботимся о перегруженной версии без [1 112] версия, которая соответствует первому псевдо определению *i == *(first2 + (i - first1)) кода, которое мы видим, просто благоприятное для итератора определение "всех выполненных с помощью итераций объектов, то же".

Подобные вопросы для других контейнеров:

0
ответ дан 24 November 2019 в 14:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: