3

我正在寻找一种方法来创建一个 C++ 向量,该向量将保存类对象(它是多维数组 - 3D 坐标系位置映射器)和以某种方式描述它的 int 对象。

我发现了很多多维单一类型向量的例子,比如

vector <vector<int>> vec (4, vector<int>(4));

我需要一个动态结构,它可以随着时间的推移在堆中增长/缩小,并具有向量类型的灵活性。

4

2 回答 2

1
// Your position object, whatever the declaration may be
struct Position { int x, y, z; };

struct Connection {
    Position position;
    int strength;
};

// This is what you want your node class to be
// based on the comment you gave.
struct Node {
    Position position;
    std::vector<Connection> connections;
};

// A vector is dynamic and resizable.
// Use std::vector::push_back and std::vector::emplace_back methods 
// insert elements at the end, and use the resize method to modify 
// the current size and capacity of the vector.
std::vector<std::vector<std::vector<Node>>> matrix;

另一种方法是将 a 定义Connectionstd::pair<Position, int>,但这不是很好,因为如果您以后想向 Connection 添加更多信息,则必须更改比应有的更多代码。

如果要调整整个多维数组的大小,则必须使用循环一一遍历所有向量并调用该resize方法。

于 2013-08-15T23:50:31.430 回答
0

您只能从 a 中获得“类型灵活性”,std::vector即让它存储多态类型。根据您的示例,您可能需要 a std::vectorof structs:

struct s
{
    int i;
    double d;
    char c;
    bool b;
};

std::vector<s> vec;

// elements can be accessed as such:
auto i = vec[0].i;
auto d = vec[0].d;
auto c = vec[0].c;
auto b = vec[0].b;
于 2013-08-15T23:40:36.390 回答