簡體   English   中英

如何計算std :: vector之間的距離 <int> :: iterator和std :: vector <int> :: reverse_iterator?

[英]How to compute distance between std::vector<int>::iterator and std::vector<int>::reverse_iterator?

我試過像這樣使用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;

可以通過base()將任何反向迭代器轉換為其基礎正向迭代器。

所以您想要的是:

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

這將為您提供與v.size()相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM