我們可以使用下面的語法來初始化一個向量。如何用顯式元素初始化程序初始化矢量?
// 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