私は最近、主に C++ で行われたプロジェクトを継承したので、これが私の最初の実際の露出です。begin()
ベクトルのand で囲まれたループ内からベクトルの要素を消去する際に問題が発生する可能性があるかどうか疑問に思っていますend()
。
これが(本質的に)私がやろうとしてきたことです:
for (vector<double>::iterator i = distance.begin(); i < distance.end(); i++) {
for (vector<double>::iterator j = i + 1; j < distance.end(); j++) {
/* code to assemble *i, *j, and some other values, say *x & *y
(also iterators) assumed to be in the distance vector */
vector< vector<double >::iterator remove;
remove.push_back(i); remove.push_back(j);
remove.push_back(x); remove.push_back(y);
sort(remove.begin(), remove.end());
for (int r = remove.size() - 1; r >= 0; r--) {
distance.erase(remove.at(r));
}
}
}
私がテストしているものについては、これはうまくいくようです。ただし、これはまぐれによるものであり、このソリューションを使用すべきではないことを懸念しています。各ループの開始時にリセットされますかdistance.end()
、それとも C++ は初期値をチェックするだけですか?