c++ - 运行时固定大小的 std::vector?

标签 c++ c++11 vector c++14

性能对我的应用至关重要

我需要类似 std::experimental::dynarray 的东西, 所以一个数组的大小是在运行时决定的。

所以我考虑为 std::vector 使用一个包装类,提供其所有功能,但无法调用 resizereservepush_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::vectorevery 方法!比如begin, end, size 等等,我都不知道怎么实现了...另外,这真的是不利于维护:只要我需要来自 std::vector 的新方法,我就需要在 CCVector 中重新实现它。

所有这些都是因为我想要在运行时固定大小的数组。如何在不使用非标准 std::experimental::dynarray 的情况下解决这个问题?

最佳答案

使用私有(private)继承,然后使用using声明导入你想要的函数,将你想要的名字引入你的类。

template<class T>
class MyVector : private std::vector<T>
{
public:
    using std::vector<T>::end;
    // etc
};

(通过私有(private)继承,您不会遇到 vector 没有虚拟析构函数的问题,这是大多数人不喜欢从标准容器继承的原因)

关于c++ - 运行时固定大小的 std::vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42672504/

相关文章:

c++ - 将一个 vector 部分分配给另一个 vector

c++ - 在 C++ 中使用 vector 设置并集算法

c++ - 使用 VC++ 2008 编译引用 STLport-5.1.4 的应用程序时出现 LNK2001 错误

C++调试返回0返回变量

C++ 模板类作为函数的参数

c++ - 需要更好地理解带有 Windows API 的智能指针

algorithm - 对矢量场进行颜色编码

c++ - 未在此范围内声明(C++中的数组)

C++ std::reference_wrapper 如何隐式转换为引用?

c++ - 如何定义自定义跨平台 size_t 类型?