C ++用另一个向量填充向量

时间:2012-03-28 16:55:07

标签: c++ vector

我有两个向量,我想用第二个填充第一个向量。向量声明如下:

vector<Vec3> firstVector;

其中Vec3是一个浮点x,y,z的结构。 我尝试过喜欢这个,并指定:

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

但它停止并抱怨,结束()存在问题。 我也尝试过后退,但当然它没有用。

在我之前阅读时,我应该使用assign来完成它,但我不知道如何正确解决它。

修改

带有insert和assign的错误消息是相同的:

这个0x00000000 ... std :: vector&gt; * const

[size] CXX0030:错误:表达式无法评估
[容量] CXX0030:错误:表达式无法评估

它指向Visual Studio的向量文件到迭代器结束返回。使用insert,它指向迭代器开始。

代码:

第一个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;
};

我在我的app类中声明了“o3DModel”结构,并将其发送到我的loader类:

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

希望这有帮助。

5 个答案:

答案 0 :(得分:3)

或者如果您不想在ctor中使用

secondVector = firstVector

答案 1 :(得分:2)

如果您希望secondVector接受firstVector的所有值,而不是其他人,

secondVector = firstVector;

如果您希望将firstVector的每个元素添加到结尾secondVector

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

如果您希望将firstVector的每个元素添加到secondVector的开头:

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

答案 2 :(得分:1)

这应该有效:

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

当您对使用vector constructor感兴趣时就是这种情况。

答案 3 :(得分:0)

你需要将第二个向量声明为Vec3 strucs的向量向量。

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

答案 4 :(得分:0)

好的,我已经解决了,但有一点环形交叉口。在FillObjData中,我创建了一个新的Vec3,创建了一个if,将第一个向量x,y,z坐标赋予新的Vec3,并将Vec3推入向量。当我声明我的结构时,我已经声明它不是指针。现在它完美无缺。