是否存在一个“保存”当前元素索引/指针的stl数据结构?

时间:2010-10-18 15:46:13

标签: c++ stl

我想改进我的c ++代码风格所以我决定我最终必须深入了解...首先,因为我需要它在一个真实的情况下,我想知道它是否可用某种在...内部保存当前索引的容器。

例如我的意思是一些容器类我可以用next()/ prev()导航但我也可以问 get()检索当前的一个,而不需要将当前索引/指针存储在我自己的类成员

(已经看过stl vector / deque,希望我没有仔细阅读doc)

4 个答案:

答案 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)

简短的回答是否定的。标准容器的一个基本设计规则是将迭代与包含分开 - 即,您总是需要一个单独的迭代器来跟踪任何给定容器中的当前“点”。

将包含与迭代相结合的容器在旧设计中非常常见,但这使得代码的不同部分几乎不可能同时迭代特定容器。