提问人:Ivan 提问时间:9/24/2022 更新时间:9/24/2022 访问量:175
std:vector<T>任意大小和任意起点
std:vector<T> of arbitrary size and arbitrary starting point
问:
假设我想要一个 ,并说我有 1000 个元素。into 有一个任意的起点,比如 15000 到 16000(1000 个元素)。std:vector<T>
T
index
T
没有 16000 个元素,我如何创建 15000 是索引,1,15001 是索引 2,等等。allocating
vector<T>
我知道我可以用 来做到这一点,但我的索引自然是 15000 到 16000 范围内的整数。Hash
我可能还可以从 Vector 和 继承我自己的类,以便将 15000 转换为 1 等,但我只是想知道是否有这个商品版本。overload
operator []
答:
3赞
kouta-kun
9/24/2022
#1
AFAIK,的指数不是变量,它总是从 0 开始。您可以手动从索引中减去 15000,如下所示:std::vector
for(int i = 15000; i < 16000; i++) {
std::cout < vector[i - 15000] << std::endl;
}
或者创建一个为您执行此操作的类:
#include <vector>
#include <iostream>
template<typename T>
class VectorWrap : public std::vector<T> {
typedef std::vector<T> super;
size_t index_base;
public:
VectorWrap(size_t index) : index_base{index} {}
typename super::reference at(size_t pos) {
return super::at(pos - index_base);
}
typename super::reference operator[](size_t pos) {
return super::operator[](pos - index_base);
}
};
int main(int argc, char** argv) {
VectorWrap<int> vw{15000};
vw.push_back(5);
vw.push_back(6);
vw.push_back(7);
std::cout << vw[15000] << std::endl;
vw[15000] = 1;
std::cout << vw[15000] << std::endl;
}
评论
std::vector
始终从索引 0 开始。您可以轻松地将 a 包装在自己的类中,该类可以对传递给它的任何索引应用偏移量。std::vector