我们可以使用下面的语法来初始化一个向量。如何用显式元素初始化程序初始化矢量?
// assume that UserType has a default constructor
vector<UserType> vecCollections;
现在,如果用户类型不提供用户类型默认的构造函数,但只有一个构造函数如下:
explicit UserType::UserType(int i) { ... }.
我应该如何调用带有矢量构造这个外在因素的初始化?
我们可以使用下面的语法来初始化一个向量。如何用显式元素初始化程序初始化矢量?
// assume that UserType has a default constructor
vector<UserType> vecCollections;
现在,如果用户类型不提供用户类型默认的构造函数,但只有一个构造函数如下:
explicit UserType::UserType(int i) { ... }.
我应该如何调用带有矢量构造这个外在因素的初始化?
不幸的是,当前C++(C++ 03)没有办法用任意元素初始化向量。你可以使用@ Erik的答案中的同一个元素来初始化它。
但是在C++ 0x中,你可以这样做。这就是所谓的initializer_list
vector<UserType> vecCollections({UserType(1), UserType(5), UserType(10)});
顺便说一句,你可能要检查出boost::assign库,它是分配给一个载体和其它容器很语法方便的方式
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
+1我相信[boost :: assign :: list_of](http://www.boost.org/doc/libs/1_46_1/libs/assign/doc/index.html#list_of)也是这样。 – 2011-03-13 20:29:24
为什么不重载命令运算符,它看起来会更好。 – 2011-03-13 23:04:19
@sonicoder:什么是命令操作符? – Nawaz 2011-03-14 03:25:41
+1的问题,因为它让我写一个初始化,这是我最终喜欢:d – Nawaz 2011-03-13 19:00:29