我目前正在学习C++,试图熟悉与之配套的标准数据结构,但它们都显得很简陋。例如,列表(list)中没有像Java中我所熟悉的get(index)这样的简单访问器。而pop_back和pop_front这样的方法也不会返回列表中的对象。因此,你需要这样做:
Object blah = myList.back();
myList.pop_back();
与其使用简单的代码:
Object blah = myList.pop_back();
在Java中,几乎每个数据结构都会返回对象,因此你不必进行这些额外的调用。为什么C++的STL容器设计成这样?在C++中,像我在Java中做的这样的常见操作不那么常见吗?
编辑:对不起,我想我的问题表述得很差,导致被踩得很多,但肯定有人可以修改它。澄清一下,我想知道STL数据结构与Java相比是如何创建的。或者我一开始使用的数据结构是错误的吗?我的意思是,这些似乎是你可能针对(例如)列表使用的常见操作,而不是每次都要编写自己的实现。
编辑:重新描述问题以更清晰明了。
return_pop_back
并不难,它可以实现您想要的功能。 - Xeostd::list<foo>::get(index)
不存在。 STL列表是一个双向链表:仅有的使用它的原因是需要能够使用O(1)成本进行拼接 - 如果您想要请求列表的第n个元素,则几乎肯定会出错并使用错误的容器。 有一些方法可以获取std::list
的第n个元素(获取begin()
,然后将其advance()
n步),但它们比编写难度更大的操作还要昂贵。 - Yakk - Adam Nevraumont