簡體   English   中英

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

[英]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());

這應該工作:

vector<Vec3> secondVector(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM