在 C++ 中使用 <initializer_list>

Using <initializer_list> in C++

我很难理解如何在 C++ 中使用 <initializer_list>。举个简单的例子:

我有这样的东西:

using namespace std;

class TV{
    vector<string> channels;
    public:
    TV(initializer_list<string> channels){}
}

假设这是我的主要内容:

int main(){
    TV x({"BBC", "CNN"}, y({"SKYNEWS", "FOX", "CNN"});
    return 0;
}

如何创建没有默认字符串参数计数的构造函数?

std::vector 的构造函数之一直接采用 std::initializer_list

vector( std::initializer_list<T> init, const Allocator& alloc = Allocator() );

所以你可以在你的构造函数中初始化

TV(std::initializer_list<std::string> _channels)
: channels(_channels)
{}

另外你应该避免在一行中声明多个变量,因为你的括号不匹配,它会更明显。

TV x{{"BBC", "CNN"}};
TV y{{"SKYNEWS", "FOX", "CNN"}};

Working demo

您的代码运行良好。

您声明时 TV x({"BBC", "CNN"}), y({"SKYNEWS", "FOX", "CNN"}); 中的大括号未对齐。调整并粘贴下面的代码。有效。

#include <iostream>
#include <vector>

using namespace std;

class TV{

vector<string> channels;

public:

TV(initializer_list<string> channels1){

    channels = channels1;
}

void printSize()
{

    cout<<channels.size()<<endl;
}


};



int main(){

TV x({"BBC", "CNN"}), y({"SKYNEWS", "FOX", "CNN"});

x.printSize();
y.printSize();

 return 0;
}

The output is 

2
3