簡體   English   中英

對多維矢量使用`push_back()`

[英]Using `push_back()` with multidimensional vectors

說,對於MWE,我有一些類似的代碼:

typedef std::vector<std::vector<std::vector<long int> > > pooHistory;
pooHistory pHist (1, vector<vector<long int>>(1, vector<long int>(1,0)));

跟蹤例如:

  • 狗的數量
  • 每只狗排便的次數
  • 每次排便的位置。

在嘗試創建新狗,排便和協調時,我遇到了一些問題。 我可以用創建新的排便

pooHist.walkHist.back().push_back(std::vector<long int>(dimensions,0));

為了澄清起見,這將在第三維中插入一個帶有2個索引的數組,用於x和y坐標。 (在實際的實現中,維度的數量是可變的。這些狗在數字行,象限,八分圓和您喜歡的任何正整數中排便!)

但是我似乎無法創造新的狗。 我嘗試了類似於pooHist.pushback(std::vector<std::vector<long int>>(1)) ,但是這創建了一個新的排便,其空間僅包含1個坐標。

這確實簡化了我的代碼,因為這告訴我pooHist.pushback(std::vector<std::vector<long int>>(dimensions))也應該創建新的排便...但是我離題了。

我不確定如何創建一個新的狗,它有1個新的排便,並且尺寸號坐標槽正在等待新的排便。

我認為您為pooHistory選擇的數據結構正在引起混亂。 將狗映射到排便位置就足夠了。 因此,存儲所有您需要的是:

std::map< std::string, std::vector< location > > pooHistory;

其中locationstruct location { double lat; double lon; }; struct location { double lat; double lon; }; map的第一個模板參數是std::string因為它表示狗的名字。 如果您選擇使用整數ID,則可以將其更改為int

每只狗排便的次數就是pooHistory["dog-name"].second.size()

希望這可以幫助!

啊哈! 我想到了!

為簡化起見,我宣布

typedef std::vector<std::vector<long int> > columnVec;
typedef std::vector<long int> rowVec;

然后使用std :: vector :: push_back和std :: vector:resize這樣:

pooHist.back().push_back(rowVec(0));
walkHist.back().back().resize(dimensions,0);

pooHist.push_back(columnVec(0));
walkHist.back().resize(1);

前兩行創建一個新的排便列表,后兩行創建一個新的排便並使用n維尺寸進行調整。 一切都初始化為零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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