タイトルが説明しているように、異なるタイプのベクトル、つまり文字列とintのstd :: removeを使用して異なる結果が得られます。 intのベクトルの場合、関数は期待どおりに動作しており、実際に物理的に要素を削除していません。しかし、それは物理的に文字列のベクトルの要素を削除し、私は理由を理解することができない(それは私が見落としている小さな何かのように感じる)ことはできません。なぜ誰がこれが起こっているのか説明できるなら、それは本当に素晴らしいでしょう。私は以下のコードと出力を掲載しました。ありがとう!異なるタイプのベクトルでstd :: removeを使った結果が異なる
//includes
using namespace std;
template <class T>
void printer(T value) {
cout << value << ", "
}
int main() {
string myvalues[] = { "yyy","Yyy", "yYy","yyY","ZZZ","zZZ", "ZzZ", "ZZz" };
int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
vector<string> v1(myvalues, myvalues + 8);
vector<int> v2(nums, nums + 8);
sort(v1.begin(), v1.end());
remove(v2.begin(), v2.end(), 7);
remove(v1.begin(), v1.end(), "yyy");
for_each(v1.begin(), v1.end(), printer<string>);
cout << endl;
for_each(v2.begin(), v2.end(), printer<int>);
return 0;
}
出力:
YYY、ZZZ、ZZZ、ZZZ、YYY、YYY、ZZZ、
1、2、3、4、5、6、8、8、
「yyy」という要素が実際に削除され、最後の要素は空になりましたが、要素「7」は論理的に削除され、最後の要素は変更されませんでした。 STDの基準からの
編集可能なコード。 –
肩甲骨。要素を削除したら、シーケンスは小さくなり、終わりを超えて見てはいけません。 –
出力にダブルカンマがありますか? – rustyx