3

簡単な例があります:

#include <vector>

int main() {
 vector<int> veci;
 vector<double> vecd;

 for(int i = 0;i<10;++i){
  veci.push_back(i);
  vecd.push_back(i);
 }
 vecd = veci; // <- THE PROBLEM
}

私が知る必要があるのは、 operator = をオーバーロードして、次のような割り当てを行う方法です。

vector<double> = vector<int>;

私は多くの方法を試しましたが、常にコンパイラはエラーを返してきました...

このコードを変更せずに機能させるオプションはありますか? 追加の行を書くことはできますが、既存の行を編集または削除することはできません。タイ。


なるほど、分かりました。別の方法でお聞きします..このコードを変更せずに機能させるオプションはありますか? 追加の行を書くことはできますが、既存の行を編集または削除することはできません。タイ。

4

3 に答える 3

12

もっと簡単な方法でやってみませんか:

vector<double> vecd( veci.begin(), veci.end() );

または:

vecd.assign( veci.begin(), veci.end() );

どちらもすぐにサポートされます:)

于 2010-02-03T15:43:48.320 に答える
6

できません。代入演算子はメンバー関数である必要があります。つまり、変更が許可されていない std::vector テンプレートのメンバーである必要があります (または、C++ 標準で述べられています)。代わりに、自由な関数を書きます:

void Assign( vector <double> & vd, const vector <int> & vi ) {
  // your stuff here
}
于 2010-02-03T15:43:41.963 に答える
0

パズルならこれでいいのに…

#include <vector>

int main() 
{
    vector<int> veci;

    {
        vector<double> vecd;
    }

    vector<int> vecd;

    for (int i = 0; i < 10; ++i)
    {
        veci.push_back(i);
        vecd.push_back(i);
    }

    vecd = veci; // voila! ;)
}
于 2010-02-03T15:57:15.443 に答える