【问题标题】:C++ needs an intermediate variable to accept iterators in <vector <vector int>>C++ 需要一个中间变量来接受 <vector <vector int>> 中的迭代器
【发布时间】:2018-04-16 11:17:53
【问题描述】:

以下产生错误:

int main() {

  mat_int mat1(5, vector<int>{1,2,3});
  mat_int mat2(5, vector<int>{4,5,6});

  for (auto it1 = mat1.begin(); it1 != mat1.end() ; ++it1) {
        for (auto it11 =  *it1.begin(); it11 != *it1.end(); it11++)
            cout << *it11;
        cout << '\n';
    }
}

编译器不接受内部循环迭代器; /home/asabbah/programming/C++/vectors1.cpp:16:28: 错误:'class __gnu_cxx::__normal_iterator*, std::vector > >' 没有名为'begin'的成员

但是,如果我插入一个临时变量:

vector<int> temp = *it1;

然后:

for (auto it11 = temp.begin(); it11 != temp.end(); it11++);

一切顺利。

知道为什么会这样吗?

【问题讨论】:

标签: c++ c++11 pointers iterator


【解决方案1】:

这是因为 member access 运算符 .dereference 运算符 * 有一个 higher priority。因此它尝试访问it1(不存在)中的begin()方法,然后尝试取消引用结果。

代替

auto it11 =  *it1.begin();

auto it11 =  it1->begin();

一步一步完成你打算做的事情。

使用临时变量使编译器首先执行取消引用,然后尝试访问临时变量中的begin 方法。

【讨论】:

  • 谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2022-08-07
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多