容器类索引不针对每个 我对C++很陌生,我尝试了解一个大项目。 这里是我遇到的问题,我想为容器类建立索引,而不为每个类建立索引

容器类索引不针对每个 我对C++很陌生,我尝试了解一个大项目。 这里是我遇到的问题,我想为容器类建立索引,而不为每个类建立索引,c++,class,pointers,containers,C++,Class,Pointers,Containers,这个方法返回一个容器类的指针: virtual Bars* getBarsPtr() { return &bars_; } 在代码中,每个元素都由for-each访问,并且可以工作。条是每个元素的元素。代码如下所示: for (auto& bar : *foo_.getBarsPtr()) { for (auto it = std::begin(bar), e = std::end(bar); it != e; ++it) { } getBarsP

这个方法返回一个容器类的指针:

virtual Bars* getBarsPtr()              { return &bars_; }
在代码中,每个元素都由for-each访问,并且可以工作。条是每个元素的元素。代码如下所示:

for (auto& bar : *foo_.getBarsPtr()) {
for (auto it = std::begin(bar), e = std::end(bar); it != e; ++it) {
}
getBarsPtr()返回指向条的指针。我想知道的是,我如何才能访问每个“酒吧”,而不为每个

更新:正如SergeyA回答的,这个容器没有提供索引访问。
关于

范围for循环不一定可以转换为索引访问。但是,它总是可以转换为迭代器访问,因为它就是这样

每个循环的范围等于以下内容:

for (auto& bar : *foo_.getBarsPtr()) {
for (auto it = std::begin(bar), e = std::end(bar); it != e; ++it) {
}
但并非每个容器都提供索引访问!最简单的例子是列表。您不能访问列表中的第5个元素,只能访问当前元素的下一个和上一个元素。这是这一结构背后的基本理念


我可以想象,您的数据结构在它定义的
begin
end
成员中具有相同的质量(您从未提供实际的结构!),但没有为
操作符[]
提供覆盖,这是索引访问所必需的。

与您的问题无关,但是我认为你应该花一些时间去了解推荐人。至于你的问题,问题是什么?为什么要使用索引(这是任何人都会向您展示的)在向量上迭代?基于范围的
for
循环有什么问题?使用迭代器有什么问题?最后,请花一些时间来学习如何创建一个迭代器。什么是
?什么是Baz?谢谢!我将遵循这些。问题已解决,但问题已更新。非常感谢@SergeyA!正如您所说,“它定义了begin和end成员,但没有为操作符[]提供重写,这是索引访问所必需的。”