STL查找功能从Deque返回了什么

What does the stl find function return from deque

本文关键字:返回 什么 Deque 查找 功能 STL      更新时间:2023-10-16

我有一个std Deque并在其中搜索元素。我的问题是,我不明白查找功能返回是什么样的形式。

std::deque< DataCellHandle > dataCellHandleArray;
std::_Deque_iterator<DataCellHandle, const DataCellHandle&, const DataCellHandle*> it =
    std::find( dataCellHandleArray.cbegin(), dataCellHandleArray.cend(), releaseHandle ); // works
std::deque< DataCellHandle >::iterator itr =
    std::find( dataCellHandleArray.cbegin(), dataCellHandleArray.cend(), releaseHandle ); // does not work

我期望将返回索引或迭代器。

std::find返回与firstlast参数相同类型的对象,在您的情况下,它是 std::deque<DataCellHandle>::const_iterator

std::find的返回类型与您实例化此功能模板的迭代器类型相同。在您的情况下,您通过dataCellHandleArray.cbegin().cend(),即std::deque::const_iterator类型,而不是std::deque::iterator。因此,这是您的修复:

std::deque<DataCellHandle>::const_iterator it = ...

请注意,这可以使用:

auto it = std::find(dataCellHandleArray.cbegin(), dataCellHandleArray.cend(),
   releaseHandle);

请注意,可以从iterator构建const_iterator,而不是逆向。

// Ok, iterator to const_iterator
std::deque<DataCellHandle>::const_iterator ci = dataCellHandleArray.begin();
// Ok, compare const_iterator and iterator:
assert(ataCellHandleArray.begin() == ataCellHandleArray.cbegin());
// Error, can't loose constness of the "pointee"
std::deque<DataCellHandle>::iterator ci = dataCellHandleArray.cbegin();