STL find查詢演算法
阿新 • • 發佈:2018-12-12
find() 為在輸入迭代器所定義的範圍內查詢單個物件的演算法,它可以在前兩個引數指定的範圍內查詢和第三個引數相等的第一個物件。
find 演算法會返回一個指向被找到物件的迭代器,如果沒有找到物件,會返回這個序列的結束迭代器。下面展示瞭如何使用 find():
std::vector<int> numbers {5, 46, -5, -6, 23, 17, 5, 9, 6, 5}; int value {23}; auto iter = std::find(std::begin(numbers), std::end(numbers), value); if (iter != std:: end (numbers)) std::cout << value << " was found. \n";
這段程式碼會輸出一條在 numbers 中找到 23 的訊息,當然,可以反覆呼叫 find() 來找出這個序列中所有給定元素的匹配項:
size_t count {}; int five {5}; auto start_iter = std::begin(numbers); auto end_iter = std::end(numbers); while((start_iter = std::find(start_iter, end_iter, five)) != end_iter) { ++count; ++start_iter; } std::cout << five << " was found " << count << " times." << std::endl; // 3 times
在 while 迴圈中,count 變數會通過自增來記錄 five 在 vector 容器 numbers 中的發現次數。迴圈表示式呼叫 find(),在 start_iter 和 end_iter 定義的範圍內查詢 five。find() 返回的迭代器被儲存在 start_ter 中,它會覆蓋這個變數先前的值。最初,find() 會搜尋 numbers 中的所有元素,因此 find() 會返回一個指向 five 的第一個匹配項的迭代器。
每次找到 five,迴圈體中的start_iter都會自增,因此它會指向被找到元素的後一個元素。所以,下一次遍歷搜尋的範圍是從這個位置到序列末尾。當不再能夠找到 five 時,find() 會返回 end_iter,迴圈結束。