性能是在我的應用固定大小的std :: vector在運行時?
關鍵我需要的東西,就像std::experimental::dynarray
,所以它的大小是在運行時決定的數組。
所以我想過使用一個包裝類std::vector
,給予其所有功能,但沒有可能打電話resize
,reserve
或push_back
。用幾句話說,所有的方法來改變它的大小(請記住我,如果我錯過了其中的一些)。
於是我開始寫這個類:
CCVector.hpp
:
template <typename T>
class CCVector{
public:
CCVector(size_t size);
T &operator[](typename std::vector<T>::size_type idx);
private:
std::vector<T> v;
};
CCVector.cpp
:
template<typename T>
CCVector<T>::CCVector(size_t size) : v(size){}
template<typename T>
T& CCVector<T>::operator[](typename std::vector<T>::size_type idx){
return v[idx];
}
但我這一點,我想我必須重新實現的std::vector
every
方法我需要!例如begin
,end
,size
等,我不知道如何實現所有這些...此外,這對維護非常不利:只要我需要一個來自std::vector
的新方法,我需要重新實現它在CCVector
。
所有這一切都是因爲我想在運行時固定大小的數組。如何在不使用非標準std::experimental::dynarray
的情況下解決此問題?
只需從std :: vector繼承,然後爲您希望在公開部分中公開的每個函數執行using語句。然後在專用部分對所有要禁用的功能執行using語句。 –
你也可以使用[這裏]的代碼(http://stackoverflow.com/a/15832431/4342498) – NathanOliver
@AlexZywicki,不,不要那樣做;看到[你不應該從'std :: vector']繼承](http://stackoverflow.com/questions/4353203/thou-shalt-not-inherit-from-stdvector) –