【发布时间】:2014-06-16 12:19:23
【问题描述】:
我正在尝试使用具有升序的单元格生成一个二次网格。
#include <iostream>
#include <vector>
class Simple
{
public:
Simple(): id(genId()) {}
static int genId()
{
static int g_id = 0;
return ++g_id;
}
int id;
};
typedef std::vector< std::vector<Simple> > SimpleGrid;
void printSimpleGrid(SimpleGrid& grid)
{
for(int i = 0; i < grid.size(); i++) {
for(int j = 0; j < grid[i].size(); j++) {
std::cout << grid[i][j].id << " ";
}
std::cout << std::endl;
}
}
int main()
{
int dim = 3;
SimpleGrid test(dim);
for (int i=0; i<dim; i++) {
std::vector<Simple> row(dim);
test[i] = row;
}
printSimpleGrid(test);
return 0;
}
我得到这个输出:
1 1 1
2 2 2
3 3 3
这与我的预期不同:
1 2 3
4 5 6
7 8 9
我做错了什么?
(我使用的是 Code::Blocks 12.11 rev 8629 和 SDK 版本 1.13.14)
【问题讨论】:
-
你确定吗?因为我得到了正确的结果coliru.stacked-crooked.com/a/ba4517515949b7db
-
@40two 是的,我只是复制粘贴了它。也许这只是我的 SDK 版本中的一个错误。 ...感谢 Coliru 的提醒 :)
-
可能是因为我用 VC++2013 也得到了正确的结果。
-
看起来向量的构造函数的实现就像创建默认构造的对象并用它的副本填充向量。请注意,此行为是正确的:cplusplus.com/reference/vector/vector/vector
-
我的错,这种行为是 c++98 特有的,c++11 应该适合你。
标签: c++ c++11 vector codeblocks c++03