我想構建一個使用向量中第二個到最後一個元素的程序,到目前爲止我已經使用了:(arr2.rbegin()+ 1)什麼是向量中第二個到最後一個元素的代碼
如果我用一個比較操作的條件,如:
if(arr2.rbegin()+1 == true)
我得到一個錯誤信息:'no match for operator =='
我想構建一個使用向量中第二個到最後一個元素的程序,到目前爲止我已經使用了:(arr2.rbegin()+ 1)什麼是向量中第二個到最後一個元素的代碼
如果我用一個比較操作的條件,如:
if(arr2.rbegin()+1 == true)
我得到一個錯誤信息:'no match for operator =='
看文檔這裏
http://www.cplusplus.com/reference/vector/vector/?kw=vector
我希望你通過
secondToLast = myVector[myVector.size() - 2];
不應該是減1而不是減2,看看指數是如何基於零的? – Damon
@Damon:不,它不應該。索引從'0'運行到'size() - 1','size() - 1'是最後一個。因此,倒數第二個是「size() - 2」。 –
你可以嘗試做這樣的訪問你的元素: -
if(*(arr2.rbegin()+1))
它通過取決於你的意思是「倒數第二個元素」 。看看下面的迭代器定義...
vector<int>::iterator it = arr2.end();
it--;
it--;
你,因爲當你聲明迭代器「點」到最後decriment迭代器的兩倍,它實際上引用位置向量中的最後一個元素之後。
不要忘記,當你想要迭代器指向的值時,你必須對其進行解引用。像這樣...
cout << *it;
許多答案和評論有正確的想法,但真正醜陋的語法。以下是兩種很好的表達方式。
arr2.end()[-2] // end() is past the last element, -1 for last element, -2 for second-last
arr2.rbegin()[1] // rbegin() is reverse order starting at 0 for last element, 1 for second-last
它的工作原理,因爲RandomAccessIterator的,這vector
已,需要提供operator[]
這樣it[n]
相當於*(it + n)
,就像爲指針。
所以你的問題的代碼變得只是
if (arr2.rbegin()[1]) // test penultimate element
'arr2.rbegin()+ 1'是一個迭代器,而不是一個值。嘗試使用'*':'if(*(arr2.rbegin()+ 1)== true)' – JoshG79
'*(arr2.rbegin()+ 1)'或'arr2 [arr2.size() - 2]'' – Dave
@ JoshG79:在這種情況下,取消引用迭代器時得到的類型也需要定義合適的運算符==。 – thokra