c++ - 将 `push_back()` 与多维 vector 一起使用

标签 c++ c++11 vector multidimensional-array

比如,对于 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 个索引的数组。 (在实际实现中,维数是可变的。这些狗在数字线上排便,在象限、八分圆和任何你喜欢的正交线上排便!)

但我似乎无法创造新的狗。 我试过类似的东西 pooHist.pushback(std::vector<std::vector<long int>>(1)) , 但这创建了一个只有 1 个坐标空间的新排便。

这确实稍微简化了我的代码,因为它教会了我 pooHist.pushback(std::vector<std::vector<long int>>(dimensions))还应该产生新的排便……但我离题了。

我不确定如何创建一只新的狗,它有 1 次新的排便和维数坐标槽等待新的排便。

最佳答案

我认为你选择的数据结构适合你的pooHistory造成困惑。一张狗到排便位置的 map 就足够了。所以要存储你所需要的是:

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

哪里locationstruct location { double lat; double lon; }; . map 的第一个模板参数是std::string。因为它表示狗的名字。如果您选择使用整数 ID,则可以将其更改为 int .

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

希望这对您有所帮助!

关于c++ - 将 `push_back()` 与多维 vector 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20027797/

相关文章:

c++ - 初始化程序错误太多

c++ - 具有虚拟析构函数的基类的子类中的默认析构函数

c++ - 序列化 C++ 仿函数

C++11,静态方法中派生类的类型推导

c++ - 如何在线程c++11中调用二类成员函数中的一类成员函数

c++ - 使用 find() 在 vector 中查找元素

r - is.vector() 和 is.numeric() 函数有什么区别?

c++ - 如何不断从 vector 中删除奇数位置的值,直到只剩下一个?

c++ - 嵌套类型的 CRTP

c++ - 通过复制捕获 Lambda 函数会导致数据损坏