如何使用c ++ 11将C ++中的向量初始化为构造函数中的某个特定大小?像这样的东西(矢量叫做my_vec):
#ifndef MAP_H
#define MAP_H
#include <vector>
struct color
{
int r;
int g;
int b;
};
class map
{
private:
int gridSize;
int verticalNum;
int horizontalNum;
std::vector< std::vector<color> > my_vec(100, vector<color>(100));
public:
map();
~map();
};
#endif // MAP_H
这不起作用,所以我尝试了这个:
#ifndef MAP_H
#define MAP_H
#include <vector>
struct color
{
int r;
int g;
int b;
};
class map
{
private:
int gridSize;
int verticalNum;
int horizontalNum;
std::vector< std::vector<color> > *my_vec;
public:
map();
~map();
};
#endif // MAP_H
在构造函数中我尝试将其初始化为:
map::map()
{
this->my_vec(100, std::vector<color>(100));
}
但是我得到一个错误:“表达式不能用作函数”
答案 0 :(得分:5)
正如您刚刚指定的C ++ 11,类内初始化可能正是您想要的:
private:
std::vector<std::vector<color>> my_vec = std::vector<std::vector<color>>(100, std::vector<color>(100));
答案 1 :(得分:2)
您必须在构造函数的初始化列表中执行此操作:
map::map() : my_vec(100, std::vector<color>(100))
{
}
但您也可以将其初始化为类变量:
class MyMap {
// ...
std::vector< std::vector<color> > my_vec =
std::vector<std::vector<color>>(100, std::vector<color>(100));
public:
MyMap() {}
~MyMap() {}
};
答案 2 :(得分:1)
您需要使用构造函数初始化列表
map::map()
: my_vec(100, std::vector<color>(100))
{}
但是,如果实际代码具有编译时硬编码大小,为什么不使用std::array
呢?像
std::array<std::array<color, 100>, 100> my_vec;