2012-08-04 137 views
1

我想弄清楚如何在構造函數的初始化列表中聲明任意大小的數組。如果這是不可能的,我應該怎麼做呢?在構造函數的初始化列表中的數組

例如:

class vectorOfInt 
{ 
public: 

private: 
    int _size; 
    int _vector[]; 
}; 

vectorOfInt::vectorOfInt() 
    :_size(32), 
    _vector(size) 
{ 
} 

基本上,我想陣列_Vector至(在這種情況下32)被初始化爲大小。我怎麼做?感謝您的任何意見。

回答

4

使用std::vector

#include <vector> 

class vectorOfInt 
{ 
public: 

private: 
    int _size; // probably you want to remove this, use _vector.size() instead. 
    std::vector<int> _vector; 
}; 

vectorOfInt::vectorOfInt() 
    :_size(32), 
    _vector(size) 
{ 
} 

編輯:既然你不希望使用std::vector,你必須自己處理內存。如果在編譯時知道數組的大小,可以使用內置數組,但我懷疑是這種情況。你必須這樣做:

#include <memory> 

class vectorOfInt 
{ 
public: 

private: 
    int _size; 
    // If C++11 is not an option, use a raw pointer. 
    std::unique_ptr<int[]> _vector; 
}; 

vectorOfInt::vectorOfInt() 
    :_size(32), 
    _vector(new int[size]) 
{ 
} 
+0

,避免前導下劃線(我知道這是不是你的主意) – juanchopanza 2012-08-04 22:06:51

+0

的練習的要點是重新創建向量類的方式,它的工作只是爲INT – 2012-08-04 22:07:16

+0

是領先的下劃線不良作風?是否有任何其他公約來識別私人數據字段和方法? – 2012-08-04 22:08:25

1

你想要的是使用一個向量,然後使用'reserve'關鍵字。這將爲32個元素分配空間,並且可以將它們初始化爲任何你想要的。

#include<vector> 
using namespace std; 

class vectorOfInt 
{ 
public: 

private: 
     int _size; 
     vector<int> _vector; 

vectorOfInt() 
{ 
    _size = 32; 
    _vector.reserve(32); 

} 



}; 
+0

我不認爲'resize'是這裏需要的。我們仍然需要push_back,並把它看作是零大小(它會是)。 – juanchopanza 2012-08-04 22:21:16

+0

這不是調整大小。這是'儲備'。分配空間後,您可以對這32個元素進行push_back。 – Nathan822 2012-08-04 22:21:55

+0

對不起,我的意思是「保留」。 'resize'會很好,但是你不妨使用size構造函數。 – juanchopanza 2012-08-04 22:23:21

相關問題