如何将C++数组转换为使用迭代器的STL std::vector?禁用方括号、push_back、at方法
C++ 数组改造为std::vector实现思路
- 首先改造main函数:原来的动态数组申请逻辑替换为,先调用
getVectorSize获取输入的size,再直接声明vector<Highscore>对象,构造时传入size参数初始化对应数量的元素,既不需要push_back也能直接使用迭代器遍历,最后不需要手动释放内存,vector会自动管理生命周期。 - readData函数改造:你写的迭代器循环头逻辑正确,迭代器可理解为指向vector内部元素的指针,不需要下标访问:
- 额外声明一个计数变量,循环每执行一次自增1,用来输出是第几个分数
- 要访问当前迭代器指向的Highscore成员,直接使用
->运算符即可,比如num->name、num->score,完全可以替代原来的highScores[index].xxx写法,避开[]和at的使用限制
- sortData函数改造:循环变量替换为迭代器,从
scores.begin()遍历到scores.end() - 1,每次循环调用findLocationOfLargest拿到当前范围内最大元素的迭代器,直接swap当前迭代器指向的元素和最大元素迭代器指向的元素即可。 - findLocationOfLargest函数改造:入参已经给定了搜索范围的首尾迭代器,和原数组版本逻辑完全对应:
- 初始将
startingLocation赋值为存储最大元素位置的迭代器 - 从
startingLocation + 1开始循环,直到碰到endingLocation停止(注意迭代器的左闭右开规则,endingLocation指向的是范围外的位置,不需要访问) - 每次比较当前迭代器和最大元素迭代器指向的score值,更大就更新最大元素迭代器,最后返回该迭代器即可
- 初始将
- displayData函数改造:和readData遍历逻辑一致,因为参数是const修饰的vector,遍历要使用
vector<Highscore>::const_iterator,解引用访问成员输出即可。
内容的提问来源于stack exchange,提问作者Eduardo Munoz Alvarez
相关产品推荐
相关产品推荐

