我有两个向量,我想用第二个填充第一个。向量声明如下:
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)
希望这可以帮助。
如果你想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 推入向量中。当我声明我的结构时,我已经声明它是真实的,而不是作为指针。现在它工作得很好。
| 归档时间: |
|
| 查看次数: |
13454 次 |
| 最近记录: |