如何将数据/值/对象添加到初始化列表中,然后将其发送给构造函数?



所以我想练习一下使用智能指针的技巧。我创建了一个类模板(单链表),其构造函数如下:

template <class Type> 
class list
  {
          //...
   public:
          list( std::initializer_list < Type > initlist ) { ... }
          //...
    };

在main-function中,我想构造初始化列表并将其传递给类构造函数作为一件事(类似这样,我认为这是可能的,但我不知道如何做):

typedef int Type;
int main ()
{
   //...
   size_t count; // to know How many elements initlist will have
   std :: initializer_list < Type > initlist;
   cout << "Enter, please, count of elements and their valuesn";
   cin >> count;
   Type temp_data;
   for (size_t i = 0; i < count; i++)
     {
        cin >> temp_data; //user input data and program add it to list
        initlist.push_back( temp_data ); 
 // it's wrong. But I found no analogue of "push_back" in std :: initializer_list
 // I used push_back to explain what I want to do
     }
   // ... do stuff
   // now I want to pass it to the class object
   list < Type > mylist ( initlist ); // or mylist = initlist, or mylist{initlist}
}

我可以像下面这样做,但是如果我不知道用户将输入多少元素和哪些元素,那么我应该怎么做:

list <Type> mylist {1,2,3,4,5,6,7,8};

那么,我该怎么写才能正确呢?也许有人有主意。谢谢。

通常在c++容器中既提供一个std::initializer_list构造函数,又提供一个构造函数,该构造函数接受两个迭代器(任意大小),并将该"range"的内容复制到容器中。

例如你的类可以是这样的:

template <class Type> 
class list {
    //...
public:
    list(std::initializer_list<Type> initlist) { ... }
    template<typename It>
    list(It begin, It end) { ... }
    //...
};

标准库中std::vectorstd::liststd::forward_liststd::deque等容器均支持。

这样做的目的是,如果用户知道他/她想在容器创建的那一刻插入的元素,他/她使用std::initializer_list重载。否则,如果他/她有其他动态构建的容器,他可以直接导入你的容器中的元素。

不存在动态大小的std::initializer_list。这个类应该是轻量级和简单的。

您可以为您的list类实现push_backpush_front,并逐步构建它。

与您当前的想法类似的是构建一个std::vector或类似的容器,然后提供一个构造函数,该构造函数接受要从该容器复制的迭代器范围。

相关内容

最新更新