【问题标题】:Iterators for nested templates [closed]嵌套模板的迭代器 [关闭]
【发布时间】:2013-03-22 22:53:10
【问题描述】:

创建嵌套模板迭代器的一般规则是什么?例如,您将如何为以下模板创建迭代器:

map<int, pair<string, int> > M;
map<map<int, string>, map<string, pair<int, int> > N;

【问题讨论】:

    标签: c++ templates iterator


    【解决方案1】:

    如果容器提供::iterator,规则是添加它。

    【讨论】:

      【解决方案2】:

      就像任何类型容器的迭代器一样:

      map<int, pair<string,int>>::iterator it1; // or const_iterator
      map<map<int,string>, map<string, pair<int,int>>::iterator it2; // or const_iterator
      

      【讨论】:

        【解决方案3】:

        只需添加::iterator

        map<int, pair<string,int>>::iterator
        map<map<int,string>, map<string, pair<int,int>>::iterator
        

        【讨论】:

          【解决方案4】:

          标准 C++ 容器定义了一个名为 iterator 和一个名为 const_iterator 的类型别名,您可以参考。

          例如,如果您的类型是:

          map<int, pair<string,int>>
          

          然后您可以通过执行以下操作获取迭代器的类型:

          map<int, pair<string,int>>::iterator
          //                        ^^^^^^^^^^
          

          或者,如果您需要一个常量迭代器:

          map<int, pair<string,int>>::const_iterator
          //                        ^^^^^^^^^^^^^^^^
          

          然而,在 C++11 中你通常不需要这样做,因为auto 允许你让编译器推断迭代器的类型:

          map<int, pair<string,int>> m;
          // Fill in the map...
          auto i = m.begin();
          

          上面sn-p的最后一行相当于:

          map<int, pair<string,int>>::iterator i = m.begin();
          

          【讨论】:

            猜你喜欢
            • 2016-03-21
            • 1970-01-01
            • 2021-01-16
            • 2014-08-19
            • 2022-09-27
            • 2020-10-22
            • 2016-12-31
            • 1970-01-01
            • 2017-11-22
            相关资源
            最近更新 更多