Böyle bir 2B vektörün başlatılması tamam mı? (Burada 5x4 2D vectro'daki tüm değerler 3 olarak başlıyor)?Bir 2D Vector'u C++ 'da bir liner olarak başlatmak için kurucuları kullanmak tamam mı?
std::vector<std::vector<int> > foo(5, std::vector<int>(4, 3));
tamam davranmaya gibi görünüyor, ama her yerde insanlar) (döngüler ve push_back için böyle bir vektör başlatılıyor tavsiye görünüyor web üzerinde arayın. Başlangıçta tüm satırların aynı vektöre işaret etmesinden korkuyordum ama bu durum böyle görünmüyor. Bir şey mi eksik?
gibi bir şey yaparak yerinde bireysel alt vektörleri inşa etmek tercih edilebilir Tek katlı yaklaşımın maliyeti, tek bir iç geçici vektörün - yani çok ** verimsiz IMO'nun - yapımıdır. – Erik
@ Erik: İnşaat * ve * imha. Ama sadece bu değil. Maliyet, aynı zamanda, yerinde inşanın gerçekleşmesi durumunda, vektör-vektör kopyalama maliyetinin tersine, vektör-vektör-kopyalama ile başlatma maliyetini de içerir. İlkel türler için farklılık aslında nitelikseldir. – AnT
Gördüğüm gibi, kopya-ctor varyantı bir dizi memcpy-eşdeğer çağrıya varacak, ilmekler ise memset-eşdeğeri bir dizi aramayı değerlendirecek. En azından derleyici biraz iyileştiriyorsa. Evet, memcpy, memset'ten daha pahalı olarak düşünülebilir - ancak kaynak verileri muhtemelen önbellekte ve muhtemelen hedef verilerde değil, bu senaryo için pratik farklılıklar göreceğinizi sanmıyorum. Vektörler daha büyük veya karmaşık nesneler içeriyorsa, elbette, onun mürekkepleri için - okunabilirliği tercih eder. Bununla birlikte, puanınız oldukça geçerli, kopya cetveli * daha verimsiz olabilir. – Erik