![](/img/trans.png)
[英]C++ function to fill a std::vector based on another std::vector's contents?
[英]C++ Fill a vector with another vector
我有兩個向量,我想用第二個填充第一個向量。 向量聲明如下:
vector<Vec3> firstVector;
其中Vec3是一個浮點x,y,z的結構。 我嘗試過喜歡這個並指定:
secondVector.assign(firstVector.begin(), firstVector.end());
但它停止並抱怨,end()存在問題。 我也嘗試過回擊,但當然它不起作用。
正如我之前所讀,我應該使用assign,但我不知道如何正確解決它。
編輯:
帶插入和賦值的錯誤消息是相同的:
這個0x00000000 ... std :: vector> * const
[size] CXX0030:錯誤:無法計算表達式
[capacity] 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";
}
希望這可以幫助。
或者,如果你不想在ctor使用中這樣做
secondVector = firstVector
如果你想secondVector
承擔所有的值firstVector
並沒有其他人,
secondVector = firstVector;
如果您希望將firstVector
每個元素添加到end secondVector
:
secondVector.insert(secondVector.end(),
firstvector.begin(), firstVector.end());
如果您希望將firstVector
每個元素添加到secondVector
的開頭:
secondVector.insert(secondVector.begin(),
firstVector.begin(), firstVector.end());
你需要將第二個向量聲明為Vec3 strucs向量的向量。
vector<vector<Vec3>> secondVector;
secondVector.push_back(firstVector);
好的,我已經解決了,但有一點環形交叉口。 在FillObjData中,我創建了一個新的Vec3,創建了一個if,將第一個向量x,y,z坐標賦予新的Vec3,並將Vec3推入向量。 當我聲明我的結構時,我已經聲明它不是指針。 現在它完美無缺。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.