gpt4 book ai didi

c++ - 如何计算 std::vector::iterator 和 std::vector::reverse_iterator 之间的距离?

转载 作者:行者123 更新时间:2023-11-28 01:56:45 38 4
gpt4 key购买 nike

我试过像这样使用 std::distance :

vi::iterator frontIter = resVec.begin();
vi::reverse_iterator backIter = resVec.rbegin();

if(std::distance(frontIter , backIter))
{
std::cout << " ! " << std::endl;
}

但是编译器给我这个错误。

partion.cpp:46:39: note: candidate is:
In file included from /usr/include/c++/4.9/bits/stl_algobase.h:66:0,
from /usr/include/c++/4.9/vector:60,
from test.h:1,
from partion.cpp:1:
/usr/include/c++/4.9/bits/stl_iterator_base_funcs.h:114:5: note: template<class _InputIterator> typename std::iterator_traits<_Iterator>::difference_type std::distance(_InputIterator, _InputIterator)
distance(_InputIterator __first, _InputIterator __last)
^
/usr/include/c++/4.9/bits/stl_iterator_base_funcs.h:114:5: note: template argument deduction/substitution failed:
partion.cpp:46:39: note: deduced conflicting types for parameter ‘_InputIterator’ (‘__gnu_cxx::__normal_iterator<int*, std::vector<int> >’ and ‘std::reverse_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int> > >’)
if(std::distance(frontIter , backIter))

那么我如何找到这两个迭代器之间的距离。更好的是,有没有一种方法可以在不使用 back_iterator 而使用两个标准迭代器的情况下解决这个问题?

for(size idx = 0 ; idx < vec.size() ; ++idx)
{
if(idx == n)
{
continue;
}

if(vec[idx] < partVal) // insert in front of partVal
{

*frontIter = vec[idx];
++frontIter;
}
else // insert at back of n
{
*backIter = vec[idx];
++backIter;
}

}

注意:

using vi = std::vector<int>;
using size = std::size_t;

最佳答案

任何reverse iterator可以通过 base() 转换为它的底层前向迭代器。

所以你想要的是:

std::distance(v.begin(), v.rbegin().base())

这会给您与 v.size() 相同的结果。

关于c++ - 如何计算 std::vector<int>::iterator 和 std::vector<int>::reverse_iterator 之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40920705/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com