gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:45:41 25 4
gpt4 key购买 nike

性能对我的应用至关重要

我需要类似 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com