Хорошо, кто-нибудь, скажите мне, что было бы лучше. Мне нужно | = элементы одного вектора с другим. То есть я хочу
void orTogether(vector<char>& v1, const vector<char>& v2)
{
typedef vector<char>::iterator iter;
for (iter i = v1.begin(), iter j = v2.begin() ; i != v1.end(); ++i, ++j)
*i |= *j;
}
Я не могу использовать for_each из-за необходимости обрабатывать 2 коллекции. Я полагаю, я мог бы сделать что-то вроде
struct BitWiseOr
{
char operator()(const char& a, const char& b) {return a | b;}
};
void orTogether2(vector<char>& v1, const vector<char>& v2)
{
transform(v1.begin(), v1.end(), v2.begin(),
v1.begin(), BitwiseOr());
}
Является ли это более эффективным решением, хотя верхнее уже на месте, а нижнее - это задание? Это прямо в середине цикла обработки, и мне нужен самый быстрый код из возможных.
Редактировать: Добавлен (очевидный?) Код для BitwiseOr. Кроме того, я получаю много комментариев о не связанных вещах, таких как проверка длины v2 и изменение имен. Это всего лишь пример, реальный код более сложный.
Ну, я профилировал оба. orTogether2 намного быстрее, чем orTwo, поэтому я буду использовать метод transform. Я был удивлен, orTogether2 был примерно в 4 раза быстрее в режиме выпуска MSVC9. Я запускал его дважды, меняя порядок во второй раз, чтобы убедиться, что это не какая-то проблема с кешем, а те же результаты. Спасибо всем за помощь.