如何使用显式元素初始化器初始化向量?

时间:2011-03-13 18:02:10

标签: c++

我们可以使用以下语法初始化矢量。

// assume that UserType has a default constructor
vector<UserType> vecCollections; 

现在,如果UserType没有为UserType提供默认构造函数,而只提供构造函数,如下所示:

explicit UserType::UserType(int i) { ... }.

如何使用向量构造函数调用此显式元素初始值设定项?

3 个答案:

答案 0 :(得分:11)

vector<UserType> vecCollections(10, UserType(2));

答案 1 :(得分:4)

不幸的是,在当前的C ++(C ++ 03)中,没有办法用任意元素初始化向量。您可以使用与@ Erik的答案中的一个相同的元素对其进行初始化。

但是在C ++ 0x中你可以做到。它被称为initializer_list

vector<UserType> vecCollections({UserType(1), UserType(5), UserType(10)});

顺便提一下,您可能想查看boost::assign库,这是一种非常方便的分配给矢量和其他容器的方法

答案 2 :(得分:4)

std::vector<char> items(10, 'A'); //initialize all 10 elements with 'A'

但是,如果要使用不同的值初始化向量,则可以编写通用的向量初始化程序类模板,并在任何地方使用它:

template<typename T>
struct initializer
{
   std::vector<T> items;
   initializer(const T & item) { items.push_back(item); }
   initializer& operator()(const T & item) 
   {
      items.push_back(item);
      return *this;
   }
   operator std::vector<T>&() { return items ; }
};

int main() {
        std::vector<int> items(initializer<int>(1)(2)(3)(4)(5));
        for (size_t i = 0 ; i < items.size() ; i++ )
           std::cout << items[i] << std::endl;
        return 0;
}

输出:

1
2
3
4
5

在ideone演示:http://ideone.com/9dODD