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

mat*_*w3r 4 c++ vector

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

vector<Vec3> firstVector;
Run Code Online (Sandbox Code Playgroud)

其中 Vec3 是一个带有 float x, y, z 的结构体。我试过用assign喜欢这个:

secondVector.assign(firstVector.begin(), firstVector.end());
Run Code Online (Sandbox Code Playgroud)

但它停下来抱怨,end() 有问题。我也试过推回,但当然它不起作用。

正如我之前读到的那样,我应该用assign来做,但我不知道如何正确解决它。

编辑:

插入和分配的错误消息是相同的:

这个 0x00000000 ... std::vector > * const

[size] CXX0030:错误:无法计算表达式
[容量] 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;
};
Run Code Online (Sandbox Code Playgroud)

我像这样在我的应用程序类中声明上面的“o3DModel”结构并将其发送到我的加载器类:

o3DModel *tfTable;

void TheApp::Init()
{
    objLoader->ImportOBJ(tfTable, "testcube.obj");
}
Run Code Online (Sandbox Code Playgroud)

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";
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

Rob*_*obᵩ 7

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

secondVector = firstVector;
Run Code Online (Sandbox Code Playgroud)

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

secondVector.insert(secondVector.end(), 
                    firstvector.begin(), firstVector.end());
Run Code Online (Sandbox Code Playgroud)

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

secondVector.insert(secondVector.begin(), 
                    firstVector.begin(), firstVector.end());
Run Code Online (Sandbox Code Playgroud)


mat*_*w3r -1

好吧,我已经解决了,但是有一点迂回。在 FillObjData 中,我创建了一个新的 Vec3,创建了一个 if,将第一个向量 x、y、z 坐标赋予新的 Vec3,并将 Vec3 推入向量中。当我声明我的结构时,我已经声明它是真实的,而不是作为指针。现在它工作得很好。