push_back()在2d向量中,什么是正确的语法?

Eve*_*iar 3 c++ stl vector

我违反了变量类型如下:

typedef unsigned int color[3];
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个这种类型的向量:

vector<color> RGB;
Run Code Online (Sandbox Code Playgroud)

现在,假设我想将一个新元素推回到这个向量中.什么是正确的语法?我的g ++不会让我这样做:

color temp = {255, 255, 255};
RGB.push_back(temp);
Run Code Online (Sandbox Code Playgroud)

我认为这将是一个很好的语法:(任何建议非常感谢

Dar*_*rda 9

您不能将原始数组用作任何标准容器的类型.

类型必须是可赋值的(它们具有隐式或显式operator =)和可构造(它们具有隐式或显式默认和复制构造函数).

您可以将数组类型包装在一个struct允许与标准容器一起使用:

struct my_colour_array
{
    unsigned int colours[3];
};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器将生成隐式运算符和构造函数.如果您想要不同的行为,您可以定义自己的行为.

对于您的使用,有一个初始化构造函数可能是有意义的:

struct my_colour_array
{
    unsigned int colours[3];

// initialising constructor
    my_colour_array (unsigned int r, unsigned int g, unsigned int b)
    {
        this->colours[0] = r;
        this->colours[1] = g;
        this->colours[2] = b;
    }
};
Run Code Online (Sandbox Code Playgroud)

然后你可以设置你的矢量:

std::vector<my_colour_array> myvector;
// push data onto container via a temporary
myvector.push_back(my_colour_array(0,255,0));
// etc
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.