gpt4 book ai didi

c++ - 在 C++ 中为 vector 容器重载 [] 运算符时, undefined index 返回什么?

转载 作者:太空狗 更新时间:2023-10-29 19:57:06 25 4
gpt4 key购买 nike

我刚开始用 C++ 实现一个基本的 vector 容器。它远未完成,但看起来像这样:

using namespace std;

typedef unsigned long long int bigInt;

namespace stl2{
template<class T>
class vector{
private:
bigInt l;
bigInt cap;
T* arr;
public:
vector(){
cap = 0;
l = 0;
}

~vector(){
if (cap > 0) delete[] arr;
}

vector(bigInt size){
cap = size;
l = size;
arr = new T[size];
}

vector(bigInt size, const T& def) : vector(size){
for (bigInt i = 0; i < size; i++){
arr[i] = def;
}
}

bigInt size(){
return l;
}

bigInt length(){
return l;
}

bigInt capacity(){
return cap;
}

void resize(bigInt size){
if (size < cap) return;
l = size;
cap = size;
}

void push_back(const T& data){
// Check if vector is full
if (l == cap) {
//Copy all elements of this vector to another
if (cap == 0)
cap = 1;
else
cap *= 2;
T* temp = new T[cap];
for (int i = 0; i < l; i++){
temp[i] = arr[i];
}
delete[] arr;
arr = temp;
}
arr[l] = data;
l++;
}

//Operators
T& operator[](bigInt index){
if (index < cap)
return arr[index];
}
};
}

所以我对 [] 运算符有疑问。我知道如果索引 < 容量,我可以返回 arr[index]。但是如果index大于等于capacity,我要返回什么?由于我要返回对元素的引用,因此无法返回值。

最佳答案

std::vector 在使用带有无效索引的 at() 时抛出异常,您可以这样做。

但是 std::vectoroperator[] 不执行边界检查,使用无效索引是未定义的行为。

关于c++ - 在 C++ 中为 vector 容器重载 [] 运算符时, undefined index 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41335823/

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