Есть ли способ сравнить два вектора?
if (vector1 == vector2)
DoSomething();
Примечание: В настоящее время эти векторы не сортируются и содержат целые значения.
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))
кода, которое мы видим, просто благоприятное для итератора определение "всех выполненных с помощью итераций объектов, то же".
Подобные вопросы для других контейнеров: