我想在地圖上使用map::find(key)
找到一個元素,然後從我發現元素的位置開始(即直到map::rend()
)以相反的順序迭代映射。從給定的映射迭代器反向迭代
但是,當我嘗試將我的迭代器指定給reverse_iterator時,出現編譯錯誤。我該如何解決這個問題?
我想在地圖上使用map::find(key)
找到一個元素,然後從我發現元素的位置開始(即直到map::rend()
)以相反的順序迭代映射。從給定的映射迭代器反向迭代
但是,當我嘗試將我的迭代器指定給reverse_iterator時,出現編譯錯誤。我該如何解決這個問題?
通過構造函數將迭代器轉換爲逆迭代器應該可以正常工作, std::map<K, V>::reverse_iterator rit(mypos)
。
使用std小例子::向量:
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
typedef std::vector<int> intVec;
intVec vec;
for(int i = 0; i < 20; ++i) vec.push_back(i);
for(intVec::reverse_iterator it(std::find(vec.begin(), vec.end(), 10));
it != vec.rend(); it++)
std::cout << *it;
}
thanx傢伙的快速反應。這樣做(即使我有時間試用其他)。 – OverTheEdge 2010-02-22 12:22:34
+1。請注意,這個答案的關鍵部分是用'it(..)'替換'it = ..',這樣可以使用顯式的ctor。 – 2010-02-22 12:30:09
感謝Rodger,它確實是reverse_iterator的構造函數之一,而不是複製構造函數。我的錯。 – pmr 2010-02-22 13:01:02
進行轉換明確:
std::map<int, int> SomeMap;
for (int i = 0; i < 10; i++)
SomeMap[ i ] = i;
std::map<int, int>::iterator it = SomeMap.find(5);
std::map<int, int>::reverse_iterator itr(it);
for (itr; itr != SomeMap.rend(); itr++)
std::cout << itr->first << std::endl;
在未來,一個小的代碼片段,並從編譯器確切的錯誤消息,可以極大地幫助解決大部分問題。 – 2010-02-22 12:36:55