2016-03-13 25 views

cevap

9

C++ 11, başlatıcı listesi kavramına sahiptir. Bunu kullanmak için, std::initializer_list<T> türünde tek bir argümanı kabul eden bir kurucu ekleyin. Örnek:

#include <vector> 
#include <initializer_list> 
#include <iostream> 
struct S 
{ 
    std::vector<int> v_; 
    S(std::initializer_list<int> l) 
    : v_(l) 
    { 
    std::cout << "constructed with initializer list of length " << l.size(); 
    } 
}; 

int main() 
{ 
    S s = { 1, 2, 3 }; 
    return 0; 
} 
2

bir initializer_list (diğer STL kaplar gibi) yinelenebilen ve size sorgulanabilir. Bu, yuyoyuppe tarafından diğer cevapta gösterildiği gibi hemen bir vector beslemesi yapabilmenizi sağlar. Ancak, başlatmanız için başka amaçlarınız olabilir ve kopyalama işlemi yapmadan listenin öğeleri üzerinde doğrudan bir işlem yapmak gibi bir şey yapabilirsiniz.

#include <initializer_list> 
#include <iostream> 
#include <algorithm> 

struct S 
{ 
    int thesum; 
    int items; 
    S(std::initializer_list<int> l) : 
    thesum(std::accumulate(l.begin(), l.end(), 0)), 
    items(l.size()) 
    {} 
}; 

int main() 
{ 
    S s = { 1, 2, 3 }; 
    std::cout << s.items << std::endl; 
    std::cout << s.thesum << std::endl; 
    return 0; 
} 

Bu yazdırır

3 
6 

Bkz:

İlgili konular