是否存在“保存”当前元素索引/指针的stl数据结构? 我想改进我的C++代码风格,所以我决定我必须深入到STL……首先,因为我需要在一个真实的情况下,我想知道它是否有可用的容器,里面有一个当前索引……p>

是否存在“保存”当前元素索引/指针的stl数据结构? 我想改进我的C++代码风格,所以我决定我必须深入到STL……首先,因为我需要在一个真实的情况下,我想知道它是否有可用的容器,里面有一个当前索引……p>,c++,stl,C++,Stl,例如,我指的是一些容器类,我可以使用next/prev导航,但我也可以询问 为了获取当前索引,无需将当前索引/指针存储在我自己的类成员中 已经看了stl vector/deque,希望我没有仔细阅读doc,听起来你想要一个 迭代器与容器一起使用。它充当指向容器中某个位置的指针,您可以递增next并递减prev。听起来您想要一个 迭代器与容器一起使用。它充当指向容器中某个位置的指针,您可以递增next并递减prev。是的,如果我正确理解您的问题,您希望查看迭代器。下面是一个例子: std::vec

例如,我指的是一些容器类,我可以使用next/prev导航,但我也可以询问 为了获取当前索引,无需将当前索引/指针存储在我自己的类成员中


已经看了stl vector/deque,希望我没有仔细阅读doc,听起来你想要一个


迭代器与容器一起使用。它充当指向容器中某个位置的指针,您可以递增next并递减prev。

听起来您想要一个


迭代器与容器一起使用。它充当指向容器中某个位置的指针,您可以递增next并递减prev。

是的,如果我正确理解您的问题,您希望查看迭代器。下面是一个例子:

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容器都有迭代器。请注意,有不同类型的迭代器,如反向、常量、双向、正向、随机访问等,它们具有不同的操作。

是的,如果我正确理解您的问题,您希望研究迭代器。下面是一个例子:

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容器都有迭代器。请注意,有不同类型的迭代器(反向、常量、双向、正向、随机访问等),它们有不同的操作可用。

如果我正确理解您的需要,那么就没有了,没有stl容器可以将迭代器存储到某种当前元素。但我不明白你为什么不愿意自己存储迭代器?像这样:

ContainerType cont;
ContainerType::iterator current;

现在你可以做++电流-如果容器具有bidir迭代器,则为当前;和*current

如果我正确理解您的需求,那么不,没有stl容器存储某种当前元素的迭代器。但我不明白你为什么不愿意自己存储迭代器?像这样:

ContainerType cont;
ContainerType::iterator current;

现在你可以做++电流-如果容器具有bidir迭代器,则为当前;而*current

简单的答案是否定的。标准容器的一个基本设计原则是将迭代与包含分离——即,您始终需要一个单独的迭代器来跟踪任何给定容器中的当前位置


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

简单的答案是否定的。标准容器的一个基本设计原则是将迭代与包含分离,即。,您总是需要一个单独的迭代器来跟踪任何给定容器中的当前位置


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

3个答案中的2个从我是否正确理解您的问题开始。这是一个值得思考的问题:对不起,我确实需要英语老师:谢谢大家,现在更清楚什么是解决问题的stl方法,如果我正确理解了你的问题,我将使用3个答案中的迭代器2开始。这是需要思考的:对不起,我确实需要英语老师:谢谢大家,现在更清楚什么是stl解决问题的方法,我将使用迭代器。你建议我在类中声明一个迭代器作为成员,例如vector::iterator my_it,让它也保持当前位置……听起来正确吗?@luca:对于向量来说可能不是个好主意,其迭代器很容易失效迭代器只不过是指向向量分配数组的指针,随着向量的增长,它可能会移动到其他位置。为什么不简单地存储索引?@UncleBens:存储索引不会有同样的责任吗?插入或删除后,它会像迭代器一样变得无效。它可能会变得无效,但不像向量迭代器那样容易。即使在回推之后,第三项仍然是第三项。@UncleBens:除非我弄错了,否则回推不会使迭代器失效,除了末尾的迭代器。就像你说的,第三项仍然是第三项;指向它的迭代器应该和指针一样工作。我遗漏了什么吗?所以你建议我在类中声明一个迭代器作为成员,比如vector::iterator my_it,让它也保持当前位置……听起来正确吗?@luca:对于向量来说可能不是个好主意,其迭代器很容易失效迭代器只不过是指向
vector的分配数组,它可以在增长时移动到其他位置。为什么不简单地存储索引?@UncleBens:存储索引不会有同样的责任吗?插入或删除后,它会像迭代器一样变得无效。它可能会变得无效,但不像向量迭代器那样容易。即使在回推之后,第三项仍然是第三项。@UncleBens:除非我弄错了,否则回推不会使迭代器失效,除了末尾的迭代器。就像你说的,第三项仍然是第三项;指向它的迭代器应该和指针一样工作。我错过什么了吗?说得好,谢谢。。但这使得代码的不同部分几乎不可能同时在特定容器中进行迭代…很好,谢谢。。但这使得代码的不同部分几乎不可能同时在特定容器中进行迭代。。。。