Ben kendi sınıf vektörü gibi liste başlatılabilir istiyorum:Kendi sınıfımı nasıl listeleyebilirim?
myClass a = {1, 2, 3};
nasıl yapabilirim C++ 11 özelliklerini kullanarak?
Ben kendi sınıf vektörü gibi liste başlatılabilir istiyorum:Kendi sınıfımı nasıl listeleyebilirim?
myClass a = {1, 2, 3};
nasıl yapabilirim C++ 11 özelliklerini kullanarak?
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;
}
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: