火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

STL容器之vector

作者: 作者的头像   huolong , 时间:2025-09-22 09:39:49 , 所有人可见, 阅读  10

STL

#include <vector> 结合了数组和链表的特点 内部实现:使用数组! 动态性:可以进行插入和删除操作,在末尾操作简单,在中间操作较困难(因为是数组!)

int main() {
    vector<string> v(2, "abc");     // "abc", "abc"
    v.pop_back();                   // "abc"
    v.push_back("de");              // "abc", "de"
    v.push_back("fg");              // "abc", "de", "fg"
    v.insert(v.end(), "hi");        // "abc", "de", "fg", "hi"
    auto it1 = v.begin();           // 迭代器指向第一个元素: "abc"
    auto it2 = v.end();             // 迭代器指向(最后一个元素的)后面!
    ++it1; --it2;                   // it1 -> "de"   it2 -> "fg"
    v.erase(it1, it2);              // "abc", "hi"
}

删除或插入中间元素时必须移动所有后续元素 → 速度慢! 需要使用迭代器(而非索引) insert 操作也是如此(需要移动元素,速度慢)

数据结构:vector

使用 [] 或 at() 进行访问

v[1000] = 10;
try {
    v.at(1000) = 10;
}
catch (out_of_range& e) {
    cout << "caught " << e.exception::what() << endl;
}

使用 []:不进行边界检查!→ 可能导致程序崩溃或出现其他不可预料的行为! → 但因此访问速度更快(通过指针算术实现) 使用 at(): 会检查索引的有效性。 因此比 [] 操作慢。 如果索引超出有效范围,则抛出异常。 at() 返回一个引用,因此可以进行赋值操作。 但赋值操作当然只能针对有效的索引进行。 使用 push_back() 或 insert() 进行插入。 调用基类 exception 的 what() 方法。what() 返回一个“解释性”的字符串。

通过迭代器访问:vector::iterator

// 使用基于范围的for循环("for each"循环):更简单
void print(vector<string> & v){
    for (string s: v)
        cout << s << "->";
    cout << "." << endl;
}

// 使用迭代器:像指向vector元素的指针
void print2(vector<string> & v){
    vector<string>::iterator it = v.begin();
    // 或者:auto it = v.begin(); (推荐,更简洁)
    while (it != v.end()){
        cout << *it << "->";     // 访问迭代器所指向的元素
        ++it;                    // 将迭代器向前移动一个元素
    }
    cout << "." << endl;
}

基于范围的for循环 (for each):使用更简单。 迭代器:行为类似于指向vector中各个元素的指针。 auto关键字:由编译器自动推断变量的数据类型。在处理复杂的数据类型时非常有用。

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码