gpt4 book ai didi

c++ - 初始化 auto-inc 类型 vector 的 vector 时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:45 27 4
gpt4 key购买 nike

我正在尝试生成一个包含递增数字的单元格的二次网格。

#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)

最佳答案

旧的/C++03 编译器会看到这个...

std::vector<Simple> row(dim);

...并将其与构造函数的重载相匹配...

explicit vector( size_type count,
const T& value = T(),
const Allocator& alloc = Allocator());

...为第二个构造函数参数创建一个原型(prototype) Simple 对象,然后将其复制到每个 dim vector 元素。

较新的/C++11 编译器将改为匹配此重载...

explicit vector( size_type count );

...然后继续调用构造函数 dim 次来创建元素。

详情 here

关于c++ - 初始化 auto-inc 类型 vector 的 vector 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24243578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com