说,对于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));
为了澄清一下,这会在x和y坐标的第三维中插入一个带有2个索引的数组。 (在实际实施中,尺寸的数量是可变的。这些狗在数字线,象限,八分音符和你喜欢的任何orthant排便!)
但我似乎无法创造新的狗。
我尝试过类似的东西
pooHist.pushback(std::vector<std::vector<long int>>(1))
,但是这创造了一个新的排便空间,只有一个坐标。
这会简化我的代码,因为那教会了我
pooHist.pushback(std::vector<std::vector<long int>>(dimensions))
也应该创造新的排便......但我离题了。
我不知道如何创造一只新的狗,一个新的排便和维数坐标槽等待新的排便。
答案 0 :(得分:1)
我认为您选择pooHistory
的数据结构会引起混淆。狗到排便位置的地图应该足够了。所以要存储你所需要的只是:
std::map< std::string, std::vector< location > > pooHistory;
其中location
为struct location { double lat; double lon; };
。地图的第一个模板参数是std::string
,因为它表示狗的名字。如果您选择了整数ID,则可以将其更改为int
。
每只狗排便的次数只是pooHistory["dog-name"].second.size()
。
希望这有帮助!
答案 1 :(得分:0)
啊哈!我想通了!
为简化起见,我宣布了
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维度调整大小。 一切都被初始化为零。