【问题标题】:for loop with different types c++具有不同类型c ++的for循环
【发布时间】:2014-04-13 11:25:38
【问题描述】:

我有一个 for 循环,我需要循环不同类型的数组,第一个是 map<string,vector<string>>,第二个是 integer 数组。

为了实现这个我做了:

struct {map<string,vector<string>>::iterator it; int i; } s;
int k = 0;
for ( s.it = m.begin(), s.i = 0; s.it != m.end(), s.i < size; s.i+=2)
{
    while (k != integer_array[s.i] && k < size)
    {
            s.it++;
        k++;
    }       
    if (k == integer_array[s.i])
    {
        cout << s.it.first << endl; // this line does not complie       
        k = 0;
            s.it = m.begin();
    }
}

解释我想要做什么: integer_array 存储索引,我正在尝试在存储在 integer_array 中的索引处打印地图值。 有什么建议吗?

【问题讨论】:

  • 您是否遇到了当前方法的一些问题?
  • 我猜// this line is not complies 的意思是“这一行无法编译”。如果我是对的,你能告诉我们编译器的错误信息吗?
  • 使用逗号,您完全忽略了第一个条件。您必须在逻辑上结合您的条件(可能&amp;&amp; 是您想要的)。

标签: c++ loops for-loop


【解决方案1】:

我猜你的问题出在迭代器上。

代替:

    cout << s.it.first << endl;

试试:

    cout << s.it->first << endl;

原因是 STL 迭代器的行为类似于指针:如果要访问指向的值,则必须取消对迭代器的引用(通过 operator * 或通过 operator ->)。

在当前情况下,指向的值是 std::pair 的 std::string 和 std::vector,并且您要打印第一个 std::string。因此,你需要写it-&gt;first

【讨论】:

  • 那你可以选择我的答案为“正确答案”... :-)
猜你喜欢
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
相关资源
最近更新 更多