如何在构造函数中初始化矢量大小?

时间:2015-11-23 08:35:04

标签: c++ c++11 vector

如何使用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));
}

但是我得到一个错误:“表达式不能用作函数”

3 个答案:

答案 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() {}
};

Live Demo

答案 2 :(得分:1)

您需要使用构造函数初始化列表

map::map()
    : my_vec(100, std::vector<color>(100))
{}

但是,如果实际代码具有编译时硬编码大小,为什么不使用std::array呢?像

std::array<std::array<color, 100>, 100> my_vec;