2012-10-13 4 views
1

У меня есть вектор векторов, которые хранят указатели. В настоящее время я перебираю их и сравниваю каждый указатель, и если я нахожу те, которые не равны, то и векторы тоже не равны, но мне интересно, правильно ли это сделать.Сравнение векторов

UPD: std::vector<std::vector<Combination*> > combinations;

+0

Вы сравниваете сами указатели? Или вы разыгрываете их в первую очередь? Если первый, то просто используйте ['operator =='] (http://en.cppreference.com/w/cpp/container/vector/operator_cmp) для всего вектора. В противном случае, как вы это делаете, все в порядке. –

+0

@BenjaminLindley я сравниваю указатели. Так что я должен использовать == на векторе векторов или каждого вектора? – Stals

+0

@Stals, Однажды на внешний вектор будет работать. Он будет сравнивать каждый элемент, который будет сравнивать каждый указатель. – chris

ответ

2

Если вы сравниваете указатели сами, то вы можете просто использовать operator== на весь вектор (векторов). Что он делает, это сначала проверяет, равны ли размеры двух векторов. Если они есть, он впоследствии сравнивает каждый элемент, используя operator==. Таким образом, это работает рекурсивно, если у вас есть вектор векторов или вектор векторов векторов. Хотя это не техническая рекурсия, так как каждый operator== на самом деле является другой функцией.

Если вы разыскиваете указатели, то, как вы это делаете, хорошо. Но для этого случая вы можете использовать std::equal с соответствующим предикатом.

Смежные вопросы