我想改进我的c ++代码风格所以我决定我最终必须深入了解...首先,因为我需要它在一个真实的情况下,我想知道它是否可用某种在...内部保存当前索引的容器。
例如我的意思是一些容器类我可以用next()/ prev()导航但我也可以问 get()检索当前的一个,而不需要将当前索引/指针存储在我自己的类成员
中(已经看过stl vector / deque,希望我没有仔细阅读doc)
答案 0 :(得分:1)
听起来你想要iterator。
迭代器与容器一起使用。它充当指向容器中位置的指针,您可以递增(下一个)并递减(上一个)它。
答案 1 :(得分:1)
是的,如果我正确理解你的问题,你想查看迭代器。这是一个例子:
std::vector<int> someVector;
// add elements to the vector here
// ...
std::vector<int>::iterator start = someVector.begin();
std::vector<int>::iterator end = someVector.end();
while(start != end)
{
std::cout << *start << std::endl;
++start;
}
它们的行为类似于指针,所有stl容器都有迭代器。请注意,有不同类型的迭代器(反向,常量,双向,前向,随机访问等),并且它们可以使用不同的操作。
答案 2 :(得分:1)
如果我正确理解了你的需求,那么没有,没有stl容器将迭代器存储到某种当前元素。但我不明白为什么你不愿意自己存储迭代器?像这样:
ContainerType cont;
ContainerType::iterator current;
现在你可以++current;
--current
(如果容器有bidir迭代器);和*current
答案 3 :(得分:1)
简短的回答是否定的。标准容器的一个基本设计规则是将迭代与包含分开 - 即,您总是需要一个单独的迭代器来跟踪任何给定容器中的当前“点”。
将包含与迭代相结合的容器在旧设计中非常常见,但这使得代码的不同部分几乎不可能同时迭代特定容器。