2012-04-03 11 views
1

私は以下のことをしたいと思います。私はコピーする代わりにベクトルの名前を変更

 vector<double> &vector1 = vector2; 
    vector2.clear(); 

をしようとしていた

//have two vectors: vector1 (full of numbers), vector2 (empty) 
    //with vectors, I mean STL vectors 
    //outer loop 
    { 
    //inner loop 
    { 
    //vector2 gets written more and more over iterations of inner loop 
    //elements of vector1 are needed for this 
    } //end of inner loop 
    //now data of vector1 is not needed anymore and vector2 takes the role of 
    //vector 1 in the next iteration of the outer loop 

    //old approach (costly): 
    //clear vector1 ,copy vector2's data to vector1, clear vector2 

    //wanted: 
    //forget about vector1's data 
    //somehow 'rename' vector2 as 'vector1' 
    //(e.g. call vector2's data 'vector1') 
    //do something so vector2 is empty again 
    //(e.g. when referring to vector2 in the next 
    //iteration of outer loop it should be an empty vector in the 
    //beginning.) 

    } // end of outer loop 

が、私はこの問題は、ベクトル1は、その後、その後、削除されたベクトル2、への参照であるということだと思う。しかし、方法がわかりません。

アイデア?

+2

別のベクターへの参照を使用して、ベクター内のデータを削除することはできません。 vector2のデータを削除したいのにvector1に保存したい場合は、**コピー**を作成する必要があります。 –

+0

私はデータをコピーする必要がありますが、私が望むのは既存のデータとは異なる名前です。私はそれがこのような参照とはうまくいかないことを知っていますが、別のアイデアが必要であることを望んでいました。 – user1304680

+0

"ベクターの名前を変更する"の全体的なポイントは何ですか? –

答えて

4

あなたはこの機能を知っている:http://www.cplusplus.com/reference/stl/vector/swap/

// swap vectors 
#include <iostream> 
#include <vector> 
using namespace std; 

int main() 
{ 
    unsigned int i; 
    vector<int> first; // empty 
    vector<int> second (5,200); // five ints with a value of 200 

    first.swap(second); 

    cout << "first contains:"; 
    for (i=0; i<first.size(); i++) cout << " " << first[i]; 

    cout << "\nsecond contains:"; 
    for (i=0; i<second.size(); i++) cout << " " << second[i]; 

    cout << endl; 

    return 0; 
} 

この機能の複雑さが一定になるようにする保証です。

+0

ありがとうございました。スワップは完全にうまく動作し、使用するのが簡単で、以前使用していたコピー命令よりもはるかに効率的です – user1304680

5

可能性がstd::vector::swapを使用することです:

vector<double> vector1; 
vector1.swap(vector2); 
3

代わりにスワップを実行してください。

あなたは次のことを行うことができます(そして、あなたがその値を維持したい場合は、他のベクトルへの参照を使用していない)
std::vector<double> vector2; 

{ 
    std::vector<double> vector1; 
    // ... fill vector1 
    std::swap(vector1,vector2); 
} 

// use vector2 here. 
1

:よう

  • は、(hereを参照してください)コピーコンストラクタをオーバーロード古いベクトルの要素の新しいベクトルにコピーされます(あなたのベクトルの要素がプリミティブでない場合、これはのみ必要です)
  • は、コピーコンストラクタ

アルを使用しますスワップ機能を使用することです。

関連する問題