【问题标题】:How do I implement an iterable structure?如何实现可迭代结构?
【发布时间】:2022-01-07 23:47:38
【问题描述】:

我想编写一个可以循环的结构。为此,我添加了两个方法 begin 和 end ,它们将返回 begin ,一个已经存在的向量的 end 值。我应该指定什么返回类型,这两种方法是否足以使 MATCH 结构在我的上下文中工作?到目前为止,这是我所得到的:

typedef std::pair<std::string, std::string> combo;
struct MATCH {
    std::vector<combo> matches;
    ? begin() { return matches.begin(); }
    ? end() { return matches.end(); }
};

int main() {
    MATCH m = { ... };
    for (const combo& i : m)
        ...;
}

【问题讨论】:

  • 我建议使用与struct 不同的容器;一个可迭代的。否则,我建议实施迭代器。根据一次迭代的值,可以返回成员;但是,为了使其工作,您需要让所有成员具有相同的类型。

标签: c++ loops struct


【解决方案1】:

我认为您要查找的类型是std::vector&lt;combo&gt;::iterator

例子:

typedef std::pair<std::string, std::string> combo;
struct MATCH {
    std::vector<combo> matches;
    std::vector<combo>::iterator begin() { return matches.begin(); }
    std::vector<combo>::iterator end() { return matches.end(); }
};


int main()
{
    MATCH m = { { {"something", "something"} } };
    for (const combo& i : m)
        cout << i.first << " " << i.second << std::endl;
   
   return 0;
}

【讨论】:

  • 使用关键字auto的好地方
  • 尽管您可能还需要std::vector&lt;combo&gt;::const_iterator begin() const { return matches.begin(); }end()。或者在某些情况下,可能只有const 版本。
猜你喜欢
  • 2013-06-30
  • 2021-09-17
  • 2013-11-02
  • 1970-01-01
  • 2019-11-19
  • 2015-01-22
  • 2016-01-23
  • 2013-09-25
  • 2015-09-05
相关资源
最近更新 更多