2015-09-17 48 views
3

我得到的錯誤錯誤在訪問多集元素C++

../src/internet-stack/mp-tcp-socket-impl.cc: In member function ‘void ns3::MpTcpSocketImpl::OpenCWND(uint8_t, uint32_t)’: 
../src/internet-stack/mp-tcp-socket-impl.cc:2471: error: no match for ‘operator-’ in ‘sFlow->ns3::MpTcpSubFlow::measuredRTT.std::multiset<_Key, _Compare, _Alloc>::end [with _Key = double, _Compare = std::less<double>, _Alloc = std::allocator<double>]() - 1’ 
/usr/include/c++/4.4/bits/stl_bvector.h:179: note: candidates are: ptrdiff_t std::operator-(const std::_Bit_iterator_base&, const std::_Bit_iterator_base&) 

,因爲我想:

double maxrttval = *(sFlow->measuredRTT.end() - 1); 

現在,在相同的代碼double baserttval = *(sFlow->measuredRTT.begin()); 工作得很好。

我不明白什麼是錯的。就像我訪問第一個元素一樣,我必須訪問最後一個元素。感謝幫助 。

回答

0

multiset的迭代器類別BidirectionalIterator,不支持operator+也不operator-,他們只是通過RandomAccessIterator支持。但它支持operator--,使您可以:

double maxrttval = *(sFlow->measuredRTT.end()--); 

,您可以通過反向迭代也得到了最後一個元素:

double maxrttval = *(sFlow->measuredRTT.rbegin()); 
0

如果您要訪問的多重集使用std::multiset::rbegin()的最後一個項目:

返回反向迭代器以反向開始返回反向 指向容器中最後一個元素的迭代器(即其 反向開始)。

反向迭代器向後迭代:增加它們會將它們移動到容器的起始位置 。

rbegin指向元素前面的元素,該元素在成員結束時指向 。

所以使用

double maxrttval = *(sFlow->measuredRTT.rbegin()); 
0

你爲什麼不使用std ::提前?

it = sFlow->measuredRTT.end(); 
std::advance(it, -1); 
double maxrttval = *it;