You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义C++向量类中重实现可赋值的at()成员函数

实现可赋值的at()方法的原理与代码

你观察得很细致!std::vector::at()之所以既能取值又能赋值,核心原因是它返回的是元素的引用(reference),而不是元素的副本。引用就像是变量的别名,对引用的赋值会直接作用到原变量上。

接下来针对你的myIntVector类,只需要简单修改at()方法的返回类型,再加上必要的边界检查,就能实现同样的功能:

#include <stdexcept> // 用于抛出越界异常

class myIntVector {
    int arraye[50] = {0};
    // 添加成员变量记录实际存储的元素数量
    size_t size_ = 0;
public:
    // 先实现push_back方法,方便后续测试
    void push_back(int val) {
        if (size_ >= 50) {
            throw std::out_of_range("myIntVector has reached maximum capacity");
        }
        arraye[size_++] = val;
    }

    // 修改返回类型为int&,返回数组元素的直接引用
    int& at(int index) {
        // 模仿std::vector::at()的边界检查逻辑
        if (index < 0 || static_cast<size_t>(index) >= size_) {
            throw std::out_of_range("myIntVector::at() index out of valid range");
        }
        return arraye[index];
    }

    // 为const对象提供重载版本,保证const场景下的安全访问
    const int& at(int index) const {
        if (index < 0 || static_cast<size_t>(index) >= size_) {
            throw std::out_of_range("myIntVector::at() index out of valid range");
        }
        return arraye[index];
    }
};

关键细节解释:

  • 返回引用的作用:把at()的返回类型从int改为int&后,函数返回的是arraye[index]的直接引用,外部对返回值的赋值操作会直接修改数组内的对应元素,这就是实现“可赋值”的核心。
  • 边界检查:和标准库的std::vector::at()保持一致,当索引越界时抛出std::out_of_range异常,避免非法内存访问导致的未定义行为。
  • const重载:添加const版本的at()后,当myIntVector是const对象时,依然可以安全调用at()获取值(此时返回的是const引用,无法赋值,符合const对象的只读特性)。

测试示例:

#include <iostream>
int main() {
    myIntVector vec;
    vec.push_back(4);
    vec.push_back(5);
    vec.push_back(6);

    // 获取指定位置的值
    std::cout << vec.at(0) << std::endl; // 输出4
    // 为指定位置赋值
    vec.at(0) = 89;
    std::cout << vec.at(0) << std::endl; // 输出89

    // 测试const对象的访问
    const myIntVector& const_vec = vec;
    std::cout << const_vec.at(0) << std::endl; // 输出89
    // const_vec.at(0) = 100; // 这行代码会编译报错,符合const对象的只读要求
    return 0;
}

这样你的myIntVector的at()方法就完全具备了和std::vector::at()一样的“既能取值又能赋值”的能力,而且全程没有继承或复制标准vector类。

内容的提问来源于stack exchange,提问作者VLN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:47:40