0

Infoというクラスがあります。

このクラスのリストを保持するために unique_ptr ベクトルを作成してみました。

マップには、キーが文字列として含まれ、unique_ptr が値として含まれます。

しかし、マップから値を取得し、それをベクトルに入れてリストを作成しようとすると、VS2010 コンパイラでエラーが発生します: error C2664: 'void std::vector<_Ty>::push_back(_Ty &&)' :パラメータ 1 を 'std::vector<_Ty>' から 'std::unique_ptr<_Ty> &&' に変換できません

vector<unique_ptr<Info>> sInfo;
QMap<QString,vector<unique_ptr<Info>>>::Iterator iterMap;
for(iterMap = map_sInfo.begin(); iterMap != map_sInfo.end(); ++iterMap)
{
    vector<unique_ptr<Info>>sValue = iterMap.value();
    sInfo.push_back((sValue)); //error C2664
}

これに関する任意の助けをいただければ幸いです。

4

1 に答える 1

1

エラー メッセージが示すように、sValue コンテナー全体をプッシュ バックしようとしています (これはvector<unique_ptr<Info>>ではなく ですunique_ptr<Info>。お気付きのように、うまくいきません。

いくつかのオプションがあります。sValueまず、push_backすべての要素のコンテンツをループできます。次に、std::copy を使用して 1 つのステートメントに要素を追加できます。

std::copy(sValue.begin(), sValue.end(), std::back_inserter(sInfo);

3 番目のオプションは、std::vector のinsert関数を使用して、コンテナー全体を一度に追加することです。

sInfo.insert(sInfo.end(), sValue.begin(), sValue.end());
于 2012-12-19T22:40:10.310 に答える