[英]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;
其中location
是struct 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.