私は多くのことをベクトルし、次のようになり、いくつかのループがあります使用していますいくつかのコード修正しようとしています:ベクトルをクリアするにはどうすればよいですか?
for (int t=0;t<T;t++){
std::vector<double> vect;
for (int i=0;i<MAX;i++){
double value;
vect.push_back(value);
}
/*....*/
}
私は外側の反復のために同じベクトルを再利用することで、これを改善するために、多かれ少なかれ方法を知っているが、これを実行している間に私は実際に能力が変わらないことが保証されることを望んでいる間にstd::vector::clear
"the vector capacity is not guaranteed to change"と呼んだときにそれを見つけました。多分私はcplusplus.comに書かれていることを誤解しているだけかもしれません。しかし、私の質問は次のとおりです。
どのようにして容量を変更せずにベクターをクリアすることができますか?
clear
の後にreserve
と呼んで容量を同じにする必要がありますか?
PS:だけ明確にするために、私は
std::vector<double> vect;
vect.reserve(MAX);
for (int t=0;t<T;t++){
for (int i=0;i<MAX;i++){
double value;
vect.push_back(value);
}
/*....*/
vect.clear();
}
すなわちへのコードの上に書き直したいです。私はまだpush_back
で記入したいのですが、私はclear()
がベクターの容量を変更するのを心配しています。
ここでは関連する議論があります。コンセンサスは、ベクトルのサイズ変更が容量に影響を与えてはいけないということです。 http://stackoverflow.com/questions/1624803/does-resizing-a-vector-invalidate-iterators – Roddy
その答えに続く議論を読んだ後、より良い答えがhttp://stackoverflow.com/a/18467916 – Cubbi
@Cubbiにありました私はかなり「クリア」は能力を変更することが許されていないと確信しているので、私の質問はちょっと古くなっています(そして、その時点ではcplusplusは間違っているようです)。私のレッスンは:標準以外の誰も信用しない;) – user463035818