-1

ほとんどの場合、stl オブジェクトの割り当て/割り当て解除がどのように行われるかについて混乱しています。例: このループを見てください。

vector<vector<int>> example;
for(//some conditions) {
    vector<int>row;
    for(//some conditions) {
        row.push_back(k);  //k is some int.
    }
    example.push_back(row);
}

この場合、オブジェクト行で何が起こっているか。例を介してアクセスした場合でも値を確認できます。つまり、実行example.push_back(row)すると新しいコピーが作成されます。私は正しいですか。同じことを防ぐ良い方法はありますか(私が正しい場合)。

stlまた、割り当て/割り当て解除がどのように処理されるか、またはそのようなメモリコピーの問題を回避するためのベストプラクティスを読むことができる参照を誰でも提供できます(大規模なアプリケーションの場合)。

どんな助けでも感謝します。

4

2 に答える 2

0

stl 実装がしなければならないことは、標準に従うことだけです。

ただしstd::swap、ベクトルの内容を別のベクトルに切り替えるためによく使用されます。これは、値のコピーが取得されるのを防ぐために使用でき、少なくとも C++11 より前の世界では、効率を達成するための良い方法です。(あなたの場合、空のベクトルを押し戻し、作成したものと交換します)。

于 2013-06-28T14:13:07.520 に答える