在C ++中使用<initializer_list>

时间:2016-10-10 16:17:12

标签: c++ string class constructor initializer-list

我很难理解如何在C ++中使用8。我们来举一个简单的例子:

我有这样的事情:

<initializer_list>

让我们说这是我的主要内容:

using namespace std;

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您的代码运行正常。

当您声明时,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