2013-02-27 17 views
6

Bir std :: vektörünü C++ sınıf kurucusunda nasıl başlatıyoruz? İlkBir std :: vektörünü C++ sınıf kurucusunda nasıl başlatıyoruz?

class MyClass 
{ 
public: 
    MyClass(int p_Var1, int* p_Vector) : Var1(p_Var1) //, Initialize std::vector - MyVector with p_Vector 
    { 
    }; 
    ~MyClass(void); 
private: 
    int Var1; 
    std::vector<int> MyVector; 
}; 
+0

std :: vector'nızı hangi yolla başlatmak istiyorum? (Kurucularının hangi özel biçimini kullanmak istiyorsunuz?) –

+1

Bu, bağlıdır. "İlklendir" ile ne demek istiyorsun? Hangi C++ standardına karşı çalışıyorsunuz? – Johnsyweb

+0

@Mark Garcia with int * p_Vector – CLearner

cevap

10

, myVector hiçbir şey, dışı önemsiz kurucular sahip olduğu için bile, başlatılır. için int dizisine bir işaretçi verdikten sonra, uzunluğunu da bilmeniz gerekir. , bir (daha deyimsel ve)

: myVector(pInitialValues, pInitialValues + length) 
Alternatif

, sen, arayan ilavesi yapalım edeceğiz ve yapıcı iki işaretçiler almak zorunda: Hem bir işaretçi ve uzunluk varsa, yapabileceğiniz başlar ve bir uç (. arayan C++ 11 kullanarak ise, o bu elde bir C stili dizi std::begin() ve std::end() kullanılarak)

: myVector(pBegin, pEnd) 

EDIT:

Sadece mükemmel bir şekilde anlaşılır olması için: int* sadece hiçbir şey yapmanıza yetecek kadar bilgi sağlamamaktadır. Bir int*, bir C stili dizisinin birinci elemanı olan işaret eder; 'un sonunu bulmak için de bir yol gerekir: bir eleman sayısı, bir uç gösterici, vb. özel durumlarda, diğer teknikler kullanılabilir; Örneğin, C stili dizisi yalnızca negatif olmayan sayılar içeriyorsa, -1'u bir posta kutusuna ve : myVector(pVector, std::find( pVector, NULL, -1)) gibi bir şey kullanabilirsiniz. Ancak bunlar özel durumlar.

+1

* önemsiz kurucular vardır *? Varsayılan yapıcı * olduğundan * olması gerekmez mi? Ve bir kopya kurucu var :) –

+0

@ BЈовић Tam olarak ne olması gerektiğinden emin değil. Formal olarak, verilen argümanlarla (veya herhangi bir başlatma belirtilmemişse, önemsiz bir varsayılan kurucu) çağrılabilen önemsiz bir kurucu. Bununla birlikte, pratik olarak, derleyici tarafından üretilenler de dahil olmak üzere veri elemanlarını ilklendiren (örneğin, sınıfın sanal işlevleri varsa) önemsiz olmayan kurucular vardır. Bu yüzden standart, üyeyi "başlatılmış" olarak kabul edebilirken, kelimenin makul bir anlamı ile başlatılamaz. (Ama 'vektör', doğru olanı yapan bir kullanıcı tanımlı bir klavyeye sahiptir.) –

İlgili konular