诱导已亮 2023-04-30 12:40 采纳率: 0%
浏览 10

二维vector 的列迭代器使用

img

原意是想要用迭代器访问vector的数组,但是访问列迭代器时,查询其他博主要用 * 来访问,但是写了报错了,求解答。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-30 14:10
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7734534
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:读入一段文本到vector对象,每个单词存储为vector中的一个元素。把vector对象中的每个单词转化为大写字母。输出vector对象中转化后的元素。
    • 除此之外, 这篇博客: vector详解,迭代器的几种失效的情况中的 扩增倍数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • vs为1.5倍,即 0.5 倍扩增Capacity
      linux为2倍,即 1 倍扩增Capacity

    • 以下回答由chatgpt基于相关博客总结生成:

      在C++中,使用二维vector的列迭代器来访问其数组需要使用以下步骤:

      1. 首先要创建一个二维vector对象,并且初始化:
      vector<vector<int>> vec{ {1,2,3}, 
                               {4,5,6},
                               {7,8,9} };
      
      1. 最好使用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中 * 运算符访问方式不同,这会给程序员带来混淆和不便。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月30日

悬赏问题

  • ¥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异常问题