2012-03-28 51 views
1

我有兩個向量,我想用第二個向量填充第一個向量。向量被聲明如下:C++用另一個向量填充矢量

vector<Vec3> firstVector; 

凡VEC3與浮子的x,y和z的結構體。 我曾嘗試喜歡這個與分配:

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

,但是它停止和抱怨,不存在與結束的問題()。 我也嘗試回推,但當然它不工作。

正如我以前讀過的,我應該用assign來做,但我不知道如何正確解決它。

編輯:

與插入的錯誤消息,並且分配是相同的:

此00000000 ...的std ::矢量> * const的

[大小] CXX0030:錯誤:無法評估表達式
[capacity] CXX0030:錯誤:無法評估表達式

它指向Visual Studio的矢量文件以迭代或者結束回報。插入它指向迭代器開始。

的代碼:

第一個Vector也是一個結構的一部分:

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"); 
} 

的objLoader類,在這裏我成功地填補我的 「v_Vertices」 向量,其中 「oModel」 是發送 「tfTable」:

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

你的代碼應該工作(儘管我不同意你「應該用assign來完成」)。你能發佈你收到的確切的錯誤信息嗎? – 2012-03-28 17:01:54

+2

'secondVector'是如何聲明的,錯誤信息究竟是什麼? (另外,一個簡單的'secondVector = firstVector'會做同樣的事情)。 – 2012-03-28 17:02:45

+0

我看到我應該發佈錯誤消息。我用它編輯我的問題。 – matthew3r 2012-03-28 17:08:04

回答

0

好吧,我已經解決了,但有一個小環島。在FillObjData中,我創建了一個新的Vec3,創建了一個if,將第一個向量x,y,z座標賦予新的Vec3,並將Vec3推入向量。當我聲明我的結構時,我已經聲明它不是一個指針。現在它完美地工作。

0

這應該工作:

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

這時候,你有興趣使用vector constructor的情況。

+0

@Robᵩ啊......是的,錯字確實:)。 – Kiril 2012-03-28 17:00:20

+0

每當我在SO帖子中看到「cplusplus.com」時,我的爐膛都會受到傷害。改爲使用cppreference.com。 – Griwes 2012-03-28 17:03:25

+0

@Griwes呀,他們需要改善他們的網頁排名......責備Google! – Kiril 2012-03-28 17:09:26

1

或者,如果你不想做的構造函數使用

secondVector = firstVector

+0

@Robᵩ - 是的抱歉是別的事情,無論如何沒有理由不使用'=' – 2012-03-28 17:00:43

1

如果你想secondVector承擔所有的firstVector值而不是其他的,

secondVector = firstVector; 

如果要將firstVector的每個元素添加到末尾secondVector

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

如果你想每個firstVector元素被添加到的secondVector開頭:

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

開始時有一個問題,但正如你寫的,我會在問題中發佈代碼。 – matthew3r 2012-03-28 17:17:24

0

你第二向量需要被宣佈爲VEC3 strucs的向量的向量。

vector<vector<Vec3>> secondVector; 
    secondVector.push_back(firstVector);