如何默认初始化std :: vector

问题描述 投票:3回答:4

试图默认初始化std :: vector

#include <iostream>
#include <vector>
int main()
{    
    class Options
    {
        std::vector<int> items{100};
    } options ;

    std::cout << "Size:" << options.items.size() << " Items[0]:" << options.items[0] << '\n';

    return 0;
 }

这将打印:

大小1:项目[0]:100

但这不是我想要的,我希望向量的大小为100。

我设法做到了

class Options
{
    std::vector<int> items{ std::vector<int>(100) };
} options ;

但是我感觉必须有一种“更好”的方式?

问候,

c++ vector stl initialization
4个回答
5
投票

在类的主体中初始化类成员的唯一方法是括号或相等的初始化它。那意味着你可以做

std::vector<int> items{ std::vector<int>(100) };

std::vector<int> items = std::vector<int>(100);

如果您不喜欢这些选项中的任何一个,则可以将初始化程序添加到类构造函数中并具有

class Options
{
    Options() : items(100) {}
    std::vector<int> items;
} options ;

但是我个人会使用前两个选项。


2
投票

为了避免由于彼此之间的不同行为而造成的混乱,>>

std::vector<int> items(100);

std::vector<int> items{100};

使用

std::vector<int> items;
items.resize(100);       //Default initializes 100 int <=> zero
// or
items.resize(100, 17);   //Initializes 100 ints with value 17

1
投票
class Options
{
    std::vector<int> items;
public: 
    Options() : items(100) {}
}

0
投票

如下更改您的代码:

© www.soinside.com 2019 - 2024. All rights reserved.