我一直在尝试创建一个2D矢量数组。这是我正在做的一个例子。
struct TILE {
int a;
};
TILE temp_tile;
std::vector<TILE> temp_vec_tile;
std::vector<std::vector<TILE>> tile;
for (int x = 0; x < 10; x++) {
for (int y = 0; y < 10; y++) {
temp_tile.a = x;
temp_vec_tile.push_back(temp_tile);
}
tile.push_back(temp_vec_tile);
}
// Why does this not work?
int x = tile[3][5].a;
任何人都可以纠正我。告诉我它为什么不起作用。
答案 0 :(得分:2)
你不清楚行之间的temp_vec_tile,所以它会继续增长......
因此,不是你的行向量都有10个元素,第一个将有10个,接下来的20个,然后是30个等等。前10个元素将始终是第一行的元素。所以索引不会让你回到你期望的元素。
您可以在循环外部保留向量&lt;&gt;的大小,而不是将其推回到临时向量&lt;&gt ;,然后将其推入外部向量&lt;&gt;中,而是直接存储在内部向量中循环。
答案 1 :(得分:0)
究竟什么不起作用?您可能会得到一些意想不到的值,因为您创建了一个不断增长的temp_vec_tile
。您可能希望在将其插入外部向量后截断它,例如,使用clear()
。