2016-12-01 20 views
0

私はこのような距離:: STDを使用してみました:std :: vector <int> :: iteratorとstd :: vectorの距離を計算する方法<int> :: reverse_iterator?

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)) 

どのようにこれらの2つのイテレータの間の距離を見つけるか。さらに、back_iteratorを使わずにこの問題を解決する方法がありますが、2つの標準イテレータはありますか?

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; 

答えて

2

どれreverse iteratorbase()を経由してその前方の基礎となるイテレータに変換することができます。

だから、あなたが望むものである:あなたのv.size()と同じ結果が得られます

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

+0

ありがとうございました。私はもっ​​と多くのcppを学ぶ必要があります – nnrales

+0

イテレーターを正しく使用していますか? * iter。イテレータの位置に値を挿入するより良い方法がありますか? vectorメンバーinsertは、reverese_iteratorを取りません。私は、ベースを使用してiterにrev iterを変換することができます。ありがとう – nnrales

+0

@nnralesあなたのコード断片が何をしているのか分かりません。あなたの質問に文脈はなく、完全な例ではありません。 – Barry

関連する問題