性能是在我的应用固定大小的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) –