我有两个向量,我想用第二个填充第一个向量。向量声明如下:
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";
}
希望这有帮助。
答案 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推入向量。当我声明我的结构时,我已经声明它不是指针。现在它完美无缺。