2012-03-28 6 views
1

私は2つのベクトルを持っています。最初のものには2番目のものを入れたいと思います。ベクトルは次のように宣言されます。C++ベクトルを別のベクトルで塗りつぶす

vector<Vec3> firstVector; 

ここで、Vec3はfloat x、y、zの構造体です。 私は割り当てでこれを気に入って試してみました:

secondVector.assign(firstVector.begin(), firstVector.end()); 

しかし、それは終わりに問題があることを、停止して文句を()。 私はまたプッシュバックを試みましたが、もちろん動作しません。

私が前に読んだように、私は割り当てでそれをするべきですが、私はそれを正しく解決する方法がわかりません。

EDIT:

インサート付きのエラーメッセージや割り当てが同じである:

この0x00000000の...のstd ::ベクトル> * constの

[サイズ] CXX0030:エラー:式が評価できません
[容量] CXX0030:エラー:式を評価できません

そして、それはiteratのVisual Studioのベクトルファイルを指していますまたはリターンに終わります。 insertを実行するとiterator beginを指します。

CODE:

最初のベクターはまた、構造体の一部である:

struct o3DModel 
{ 
    vector<Vec3> v_Vertices; 
}; 

struct Vec3 { 
public: 
Vec3() {} 

Vec3(float X, float Y, float Z) 
{ 
    x = X; 
    y = Y; 
    z = Z; 
} 

float x, y, z; 
}; 

私はこのように私のアプリのクラスでは、上記「o3DModel」構造体を宣言し、私の​​ローダにそれを送信クラス:

o3DModel *tfTable; 

void TheApp::Init() 
{ 
    objLoader->ImportOBJ(tfTable, "testcube.obj"); 
} 

"oModelは" 送られ "tfTable" である私は成功した私の "v_Vertices" ベクトルを埋めるobjLoaderクラス、、:

bool OBJLoader::ImportOBJ(o3DModel *oModel, char *strFileName) 
{ 
    FillObjData(oModel); 
    ... 
    return true; 
} 

void OBJLoader::FillObjData(o3DModel *oModel) 
{ 
    oModel->v_Vertices.insert(oModel->v_Vertices.begin(), v_Vertices.begin(), v_Vertices.end()); 
    // This here with insert 
    outFile2 << oModel->v_Vertices[0].x << "\n"; 
} 

これが役に立ちます。

+3

あなたのコードはうまくいくはずです(ただし、私はあなたが「割り当てで行うべき」という意見に同意します)。受け取った正確なエラーメッセージを投稿できますか? –

+2

'secondVector'はどのように宣言されていますか?エラーメッセージは何ですか? (また、単純な 'secondVector = firstVector'も同じことをします)。 –

+0

エラーメッセージが表示されるはずです。私はそれで私の質問を編集する。 – matthew3r

答えて

0

私はそれを解決しましたが、ちょっとした回り道がありました。 FillObjDataでは、新しいVec3を作成し、ifを作成し、最初のベクトルx、y、zを新しいVec3に割り当て、Vec3をベクトルにプッシュしました。そして私が私の構造体を宣言したとき、ポインタとしてではなく、それを実際に宣言しました。今は完璧に動作します。

0

これは動作するはずです:あなたはvector constructorを使用することに興味を持っている場合だ

vector<Vec3> secondVector(firstVector.begin(), firstVector.end()); 

を。

+0

@Robᵩああ...はい、実際には:)。 – Kiril

+0

SOポストで「cplusplus.com」が表示されるたびにハートが痛いです。代わりにcppreference.comを使用してください。 – Griwes

+0

@Griwes yah、彼らはページランクを改善する必要がある... Googleを非難する! – Kiril

1

それとも、あなたがfirstVectorの値となし、他のすべてを取るためにsecondVectorをしたい場合はCTOR使用

secondVector = firstVector

+0

@Robᵩ - はい申し訳ありませんが何か他のものでした、とにかく理由は使用しない '=' –

1

でそれを行うにはしたくない場合は、

secondVector = firstVector; 

firstVectorの各要素を末尾に追加する場合はsecondVector

secondVector.insert(secondVector.end(), 
        firstvector.begin(), firstVector.end()); 

あなたがfirstVectorの各要素がsecondVectorの先頭に追加したい場合は、次の

secondVector.insert(secondVector.begin(), 
        firstVector.begin(), firstVector.end()); 
+0

始まりに問題がありますが、あなたが書いたように私は質問にコードを掲載します。 – matthew3r

0

あなたは第二のベクターは、Vec3のstrucsのベクトルのベクトルとして宣言する必要があります。

vector<vector<Vec3>> secondVector; 
    secondVector.push_back(firstVector); 
関連する問題