【问题标题】:How do I create a List within a multi-dimensional array / grid c++如何在多维数组/网格 C++ 中创建列表
【发布时间】:2019-05-04 19:18:05
【问题描述】:

我的程序遇到了一个绊脚石。我正在用 C++ 编程并使用 OpenGL 进行图形处理。我正在寻找用网格划分空间(用二维数组表示 - grid[rows][cols])。网格在每个索引处都有“单元格”。

在此网格内和每个 INDEX 位置,即网格 [0] [0],我希望在对象 ID(int 值)移动到每个网格单元格时收集它们的列表。索引位置 grid[0][0] 的列表应该随着屏幕上的移动对象实时/动态更新。

我想检索对象 ID,因为它们会填充列表以供稍后进行碰撞检查。

作为视觉效果应该如下:

网格数组

+[0][0] --> 列表[]

+[0][1] --> 列表[]

+[0][2] --> 列表[]

+[0][3] --> 列表[]

+[1][0] --> 列表[]

+[1][1] --> 列表[] ...等等

有没有办法在 C++ 中做到这一点? Java 似乎能够根据需要在数组点内创建新数组……一定有办法吗?

哈希表、链表已经超出我的想象……但如果我需要知道它们,请告诉我,我会更详细地研究它们…… 提前谢谢了。

【问题讨论】:

  • std::vector<std::vector<std::list<ID>>> 什么的?
  • 也许这是少数情况之一,std::vector<int>[][] 是合适的
  • 网格的尺寸是固定的还是动态的?
  • 你考虑过空间散列吗?这是“将空间划分为网格并检查每个单元格中的碰撞”的常用方法......但如果你想从二维数组开始,那很好。
  • @user463035818 - 网格是固定大小的,等于 10 x 10

标签: c++ arrays list multidimensional-array grid-search


【解决方案1】:

试试这样:

#include <iostream>
#include <vector>
#include <list>
using namespace std;

// some data
struct DATA
{
    int x;
};

int main()
{
    vector<vector<list<DATA>>> matrix_of_lists;
    matrix_of_lists.resize(2);
    matrix_of_lists[0].resize(2);
    matrix_of_lists[1].resize(2);

    DATA d;
    d.x = 1;
    matrix_of_lists[0][0].push_back(d);

    cout << matrix_of_lists[0][0].front().x;
}

【讨论】:

  • 您存储shared_ptrs of lists 而不仅仅是列表本身的任何特殊原因?
  • @snake_style,我已经实现并尝试了您建议的代码,它似乎无法接受更多数据推送回同一位置,即 matrix_of_lists[0][0].push_back(d2) , matrix_of_lists[0][0].push_back(d3) 等...这个方法能做到吗?
  • @snake_style,我想通了 - 它在技术上第一次确实有效,但我无法打印出所有列表。现在我使用 for (auto const& c : matrix_of_lists[0][0]) { cout
猜你喜欢
  • 2011-04-18
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2023-03-23
  • 2021-04-07
  • 2020-07-17
  • 1970-01-01
  • 2013-02-14
相关资源
最近更新 更多