C++ öğreniyorum ve STL konteynırlarına bakıyordum. Birçok sorum var ama bence ilk önce bu olabilir. Bu sınıfı ve onun vektörünü düşünün.Vektör sıfırlama neden oluşturuyor ve kopyalanıyor?
class A {
int i;
// A(const A&);
public:
A(int i) : i(i) {cout << "consting " << i << endl;}
A(const A& ot) : i(ot.i) {cout << "copying " << i << endl;}
};
int main() {
vector<A> v1 = {A(1),A(2),A(3),A(4)};
vector<A> v2(1,A(5));
vector<A> v3;
v3.push_back(A(6));
}
Açıkça inşa ve her A
kopyalıyor bana çıktı
consting 1
consting 2
consting 3
consting 4
copying 1
copying 2
copying 3
copying 4
consting 5
copying 5
consting 6
copying 6
verir.
Bunu önlemenin bir yolu var mı? Demek istediğim, fazladan nasıl kopyalayabilirim ve vektöre A
'u nasıl yapılandırabilirim. Bu mümkün mü? Değilse nedenini açıklayabilir mi? Teşekkür ederim.
DÜZENLEME: Tamamlama aşkına push_back
Böyle başlatıcı liste yapıcısı kullanırken bir kopyasını sahip kaçınamaz aynı
sorun std :: initializer_list' o yüzden her yapıcı o unsurları kopyalamak zorunda kullanarak içerik var "sahibi olan" 'olmasıdır . Mantıklı değil ama std :: initializer_list’in çalışması nasıl. Kötü şans. – ipc
@ipc Diğer inşaat durumları nedir? Diğerleri için mümkün mü? –
@Aurora: Aslında düşündüğünüzden çok daha kolay. 'A (6) 'yerine, sadece' 6 'ekleyin. –