【发布时间】:2018-12-14 01:12:07
【问题描述】:
我有以下代码:
#include "stdafx.h"
#include <map>
#include <string>
#include <iostream>
class MyObject
{
public:
MyObject()
: m_Items{ { 1, "one" },{ 2, "two" },{ 3, "three" } }
{}
RETURNTYPE GetStringIterator() const
{
IMPLEMENTATION
}
private:
std::map<int, std::string> m_Items;
};
int main()
{
MyObject o;
for (auto& s : o.GetStringIterator())
{
std::cout << s;
}
}
RETURNTYPE 和 IMPLEMENTATION 应该是什么以允许 MyObject 的任何客户端(在本例中为 main() 函数)迭代 m_Items 映射的值,而不复制任何数据?似乎这应该可以使用基于 c++11 范围的 for 循环和迭代器来实现。但我一直无法弄清楚如何。
【问题讨论】:
-
是否使用 Boost 选项?如果是这样,可以使用 Boost.Range 及其
boost::iterator_range。 -
请注意,在 C++ 中,“迭代器”是一个范围内的 位置。我将函数命名为
GetStrings -
这完全是想多了。
RETURNTYPE应该只是auto &,IMPLEMENTATION应该是return m_items;。任务完成。 -
@SamVarshavchik 应该吗?这能实现吗?有没有可能你没有考虑到这个问题?如果 OP 要求迭代这些值,因为......也许...... OP 只想迭代这些值怎么办?
标签: c++ c++11 for-loop generator