Wol*_*olf 5 c++ vector codeblocks c++11 c++03
我正在尝试使用具有递增数字的单元格生成二次网格.
#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;
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
1 1 1
2 2 2
3 3 3
Run Code Online (Sandbox Code Playgroud)
这与我的预期不同:
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
(我正在使用Code :: Blocks 12.11 rev 8629和SDK版本1.13.14)
旧版/ C++ 03编译器会看到这个......
std::vector<Simple> row(dim);
Run Code Online (Sandbox Code Playgroud)
...并将它与构造函数的这个重载相匹配......
explicit vector( size_type count,
const T& value = T(),
const Allocator& alloc = Allocator());
Run Code Online (Sandbox Code Playgroud)
... Simple为第二个构造函数参数创建一个原型对象,然后将其复制到每个dim向量元素.
较新的/ C++ 11编译器将匹配此重载...
explicit vector( size_type count );
Run Code Online (Sandbox Code Playgroud)
...然后继续调用构造函数dim次数来创建元素.
细节在这里
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |