c++ - 如何将指针作为迭代器返回?

标签 c++ function return-value lvalue

我需要实现迭代器,但我没有时间制作漂亮的迭代器类,所以我决定只返回指针。是这样的

int* begin()
{
    return p;
}

但我希望它们像往常一样运行 STL 迭代器

*++begin(); // doesn't work because returned pointer isn't l-value

std::vector<int> vi{ 0, 1 };
*++vi.begin(); // works fine

int* p = begin();
*++p;  // works fine as well

我该怎么做?

最佳答案

指针确实完全满足迭代器要求(指针甚至满足最专业的随机访问迭代器要求)。您的问题来自这样一个事实,即在您正在使用的标准库的实现中,例如提供的迭代器std::vector 支持比迭代器要求更多的操作。

换句话说,该标准保证++vi.begin() 将适用于std::vector 迭代器vi。它恰好适用于您对标准库的实现,但它是一个实现细节。 支持的迭代器仍然是完全有效的迭代器。

因此,回答您的问题:如果您想要一个支持所有迭代器操作的迭代器的快速替代品,您当然可以使用指针。如果您想要一个迭代器的快速替代品,除了迭代器要求外,它还支持您的标准库实现支持的所有操作,您可能必须推出自己的类。

关于c++ - 如何将指针作为迭代器返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34305762/

相关文章:

javascript - 从对象字面量模式返回值

c++ - 在内核级安全隐藏文件

c++ - 如何使用 luabind 在脚本中正确加载文件?

php - 有人可以向我解释一下 PHP 中的 pack() 函数吗?

mysql - 在 SQL 中,如何输出对多个列执行函数的列?

c# - C# 中的 return 语句到底做了什么?

c++ - std::tuple,自动构造顺序

c++ - 从 bitset 创建单色 BMP

python - 在 python 的函数中定义函数有什么好处?

c - 为什么 OpenSSL 加密函数成功时返回 1,失败时返回 0?