正在使用大括号括起来的初始值设定项列表初始化结构向量

Initializing struct vector with brace-enclosed initializer list

本文关键字:列表 向量 结构 初始化 起来      更新时间:2023-10-16

我初始化正常类型向量,如下所示:

vector<float> data = {0.0f, 0.0f};

但当我使用结构而不是普通类型的时

struct Vertex
{
    float position[3];
    float color[4];
};
vector<Vertex> data = {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f, 0.0f}};

我得到错误could not convert '{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f, 0.0f}}' from '<brace-enclosed initializer list>' to 'std::vector<Vertex>'。这个怎么了?

缺少一组{}

std::vector<Vertex> data =
{ // for the vector
    { // for a Vertex
        {0.0f, 0.0f, 0.0f},      // for array 'position'
        {0.0f, 0.0f, 0.0f, 0.0f} // for array 'color'
    },
    {
        {0.0f, 0.0f, 0.0f},
        {0.0f, 0.0f, 0.0f, 0.0f}
    }
};

您实际上还需要一个{}

vector<Vertex> data = {{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f, 0.0f}}};

一个"{"表示向量,一个表示结构,一个(对)表示结构成员数组…

还可以初始化具有向量成员的对象。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Test
{
   public:
   struct NumStr
   {
      int num;
      string str;
   };
   Test(vector<int> v1,vector<NumStr> v2) : _v1(v1),_v2(v2) {}
   vector<int> _v1;
   vector<NumStr> _v2;
};
int main()
{
   Test t={ {1,2,3}, {{1,"one"}, {2,"two"}, {3,"three"}} };
   cout << t._v1[1] << " " << t._v2[1].num << " " << t._v2[1].str << endl;
   return 0;
}

2 2两个