У меня есть программа, которая просто добавляет два вектора v1 и v2 следующим образом: v1 + = v2.На каждой итерации v2 добавляется к v1.Рассмотрим следующую программу:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
typedef vector<double> v_t;
int main(){
v_t v1;
v_t v2;
for (int i = 1; i<10; i++){
v1.push_back(i);
v2.push_back(i);
if (i == 5){ // Just want to insert a 0 inbetween
v1.push_back(0);
v2.push_back(0);
}
}
// v1 : 1 2 3 4 5 0 6 7 8 9
// v2 : 1 2 3 4 5 0 6 7 8 9
v_t::iterator it2(v2.begin());
for(v_t::iterator it(v1.begin()), end(v1.end()); it != end; )
*(it++) += *(it2++);
copy(v1.begin(), v1.end(), ostream_iterator<double>(cout, " "));
cout << endl;
}
Вывод программы:
2 4 6 8 10 0 12 14 16 18 // This is correct and what I need
, но если я изменю цикл for следующим образом:
.
.
.
v_t::iterator it2(v2.begin());
for(v_t::iterator it(v1.begin()), end(v1.end()); it != end && ( *(it++) += *(it2++) ); );
copy(v1.begin(), v1.end(), ostream_iterator<double>(cout, " "));
cout << endl;
}
Сейчасвывод:
2 4 6 8 10 0 6 7 8 9
т.е. всякий раз, когда он встречает 0 в одном и том же месте в обоих векторах, он прекращает добавление.Зачем ?Более 0 не означает конец какого-либо вектора, не так ли?Это также значение.
Пожалуйста, не стесняйтесь редактировать заголовок моего вопроса, если считаете, что он не имеет смысла.