原意是想要用迭代器访问vector的数组,但是访问列迭代器时,查询其他博主要用 * 来访问,但是写了报错了,求解答。
1条回答 默认 最新
关注 - 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7734534
- 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:读入一段文本到vector对象,每个单词存储为vector中的一个元素。把vector对象中的每个单词转化为大写字母。输出vector对象中转化后的元素。
- 除此之外, 这篇博客: vector详解,迭代器的几种失效的情况中的 扩增倍数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
vs为1.5倍,即 0.5 倍扩增Capacity
linux为2倍,即 1 倍扩增Capacity- 以下回答由chatgpt基于相关博客总结生成:
在C++中,使用二维vector的列迭代器来访问其数组需要使用以下步骤:
- 首先要创建一个二维vector对象,并且初始化:
vector<vector<int>> vec{ {1,2,3}, {4,5,6}, {7,8,9} };
- 最好使用auto关键字自动推导迭代器类型,并且通过循环访问每一列:
for (auto it = vec[0].begin(); it != vec[0].end(); ++it) { cout << *it << endl; }
这里以访问第一列为例,直接使用二维vector的下标运算符访问第一列,并使用begin()和end()函数获取该列的起始和终止迭代器。
如果要访问所有列,则可以通过使用内层迭代器的advance函数,将外层迭代器向后移动一个元素。注意,在使用advance函数时,要先将迭代器类型指定为auto。
for (auto it = vec[0].begin(); it != vec[0].end(); ++it) { for (auto inner = vec.begin(); inner != vec.end(); ++inner) { cout << *it << " "; advance(it, 1); } cout << endl; }
这样就可以输出所有列了。同时还需注意,advance提供了协成迭代器递增的功能。
虽然可以使用 * 运算符来访问二维vector中的元素,但是不建议这样使用。因为应该使用迭代器来访问vector中的元素,这样代码可读性更高,缩小了出错的概率。而且,一维vector中 * 运算符访问方式不同,这会给程序员带来混淆和不便。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 pip install后修改模块路径,import失败,需要在哪里修改环境变量?
- ¥15 爬取1-112页所有帖子的标题但是12页后要登录后才能 我使用selenium模拟登录 账号密码输入后 会报错 不知道怎么弄了
- ¥30 关于用python写支付宝扫码付异步通知收不到的问题
- ¥50 vue组件中无法正确接收并处理axios请求
- ¥15 隐藏系统界面pdf的打印、下载按钮
- ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
- ¥15 基于pso参数优化的LightGBM分类模型
- ¥15 安装Paddleocr时报错无法解决
- ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
- ¥50 分布式追踪trace异常问题