2012-03-28 74 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);