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))
那麼我如何找到這兩個迭代器之間的距離。更好的是,有沒有辦法解決這個問題,而不使用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;
謝謝。我需要學習更多cpp – nnrales
我是否正確使用迭代器? * iter。有沒有更好的方法在迭代器的位置插入一個值。 vector成員插入不會引入reverese_iterator。可能是我可以轉換爲iter使用base.Thanks – nnrales
@nrarales我不知道你的代碼片段正在做什麼。在你的問題中沒有上下文,這不是一個完整的例子。 – Barry