std::find
#include <algorithm>
template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);
Tìm kiếm phần tử đầu tiên trong một phạm vi (range) có giá trị bằng với một giá trị cho trước.
Tham số
first
- Input Iterator trỏ đến phần tử đầu tiên trong phạm vi cần tìm kiếm.
last
- Input Iterator trỏ đến phần tử ngay sau phần tử cuối cùng trong phạm vi cần tìm kiếm. Phạm vi tìm kiếm bao gồm từ
first
đếnlast
nhưng không bao gồmlast
([first, last)
).
val
- Giá trị cần tìm kiếm trong phạm vi.
Giá trị trả về
- Iterator trỏ đến phần tử đầu tiên trong phạm vi
[first, last)
có giá trị bằngval
. - Nếu không tìm thấy phần tử nào có giá trị bằng
val
, hàm trả vềlast
.
Đặc điểm
find()
chỉ tìm kiếm phần tử đầu tiên có giá trị bằngval
. Nếu có nhiều phần tử trùng lặp, nó sẽ trả về iterator đến phần tử đầu tiên được tìm thấy.- Phạm vi
[first, last)
là "nửa mở", nghĩa là không bao gồm phần tửlast
. - Để sử dụng
find()
, kiểu dữ liệu của các phần tử trong phạm vi cần hỗ trợ toán tử so sánh bằng==
để có thể so sánh vớival
. Đối với các kiểu dữ liệu tự định nghĩa, bạn cần đảm bảo đã nạp chồng toán tử==
cho kiểu dữ liệu đó. find()
có độ phức tạp tuyến tínhO(n)
, tức là trong trường hợp xấu nhất (phần tử không tồn tại), nó sẽ phải duyệt qua toàn bộ phạm vi.find()
thường được sử dụng để kiểm tra xem một giá trị có tồn tại trong một container (như vector, array, list, ...) hay không, và nếu có, để xác định vị trí của nó.
Ví dụ
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
int main() {
std::vector<int> numbers = {10, 20, 30, 40, 30, 50};
// Tìm kiếm số 30
std::vector<int>::iterator it = std::find(numbers.begin(), numbers.end(), 30);
if (it != numbers.end()) {
std::cout << "Found 30 at position: " << (it - numbers.begin()) << std::endl;
} else {
std::cout << "30 not found in the vector.\n";
}
// Tìm kiếm số 60
it = std::find(numbers.begin(), numbers.end(), 60);
if (it != numbers.end()) {
std::cout << "Found 60 at position: " << (it - numbers.begin()) << std::endl;
} else {
std::cout << "60 not found in the vector.\n";
}
// Tìm kiếm ký tự trong chuỗi
std::string myString = "Hello World";
std::string::iterator sit = std::find(myString.begin(), myString.end(), 'W');
if (sit != myString.end()){
std::cout << "Found W at position: " << (sit - myString.begin()) << std::endl;
}
return 0;
}
Các hàm liên quan
search | Tìm kiếm sự xuất hiện đầu tiên của một dãy con trong một phạm vi lớn hơn |
binary_search | Kiểm tra xem một giá trị cho trước có tồn tại trong một phạm vi đã được sắp xếp hay không, sử dụng thuật toán tìm kiếm nhị phân |
for_each | Áp dụng một hàm (hoặc đối tượng hàm) cho mỗi phần tử trong một phạm vi được chỉ định |