简体   繁体   English

在结构中初始化 std::vector

[英]Initialize std::vector in a struct

I have a struct with 2 std::vector s as given below.我有一个带有 2 个std::vector的结构,如下所示。 I want to initialize the vector with 2048 elements having initial value 0.0.我想用初始值为 0.0 的 2048 个元素初始化向量。

struct PixelMaps
{
    vector<double> pixelMapX;
    vector<double> pixelMapY;
};

I tried the following code.我尝试了以下代码。 This creates the vector of 2 elements only.这仅创建 2 个元素的向量。 How can I initialize the structure with 2048 elements in a single statement with initialization list?如何在带有初始化列表的单个语句中初始化具有 2048 个元素的结构?

PixelMaps test{ {2048,0.0}, {2048, 0.0} };

std::vector has a constructor using std::initializer_list , so you can't use brace-init-list - it will always end up in that constructor. std::vector有一个使用std::initializer_list的构造函数,因此您不能使用大括号初始化列表 - 它总是会出现在该构造函数中。 You need more explicit initialization:您需要更明确的初始化:

PixelMaps test{ std::vector(2048,0.0), std::vector(2048, 0.0) };

Or (pre C++17)或(C++17 之前)

PixelMaps test{ std::vector<double>(2048,0.0), std::vector<double>(2048, 0.0) };

Depending on your C++ taste, in C++20 you could write根据您的 C++ 品味,在 C++20 中您可以编写

#include <vector>

struct PixelMaps
{
    std::vector<double> pixelMapX;
    std::vector<double> pixelMapY;
};

int main() 
{ 
    
    PixelMaps test {
        .pixelMapX {std::vector(2048,0.0)},
        .pixelMapY {std::vector(2048,0.0)}
    };
} 

This is known as designated initialization .这称为指定初始化

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM