Tìm kiếm¶
Trong quá trình luyện công, người học phải tự mình viết những hàm tìm kiếm nhằm rèn luyện tư duy và kỹ thuật lập trình. Tuy nhiên, khi làm bài thi, thời gian là yếu tố quan trọng, thí sinh nên sử dụng những công cụ có sẵn của ngôn ngữ, hạn chế viết lại hoặc tạo lại nhằm dành thời giờ và công sức cho ý tưởng.
Bài viết này hướng dẫn cách sử dụng một số hàm có sẵn liên quan đến tìm kiếm trên một vector.
Tìm giá trị của phần tử nhỏ nhất¶
Đặt vec
là vector gồm các số nguyên.
Nội dung này sẽ cập nhật sau khi chủ thớt được đồ-nét :)
Các phần tử của vec
được phát sinh ngẫu nhiên bằng đoạn mã sau:
Output:
Trong C++, để tìm vị trí của phần tử nhỏ nhất và lớn nhất trong vector, ta sử dụng hàm min_element()
và max_element()
của thư viện algorithm
.
Hai hàm này đều trả về con duyệt, có kiểu là vector<int>::iterator
, trỏ vào phần tử nhỏ nhất hoặc lớn nhất.
Sau khi có được con duyệt, ta dùng toán tử *
để lấy giá trị tại vị trí tương ứng.
Đoạn mã sau tìm giá trị của phần tử nhỏ nhất trong vector.
Output:
Tìm chỉ số của phần tử lớn nhất¶
Để lấy được chỉ số tại vị trí tương ứng, ta đem con duyệt trả về trừ đi vector.begin()
.
Đoạn mã sau tìm chỉ số của phần tử lớn nhất.
Output:
Nếu có nhiều phần tử lớn nhất thì hàm max_element
trỏ vào vị trí lớn nhất đầu tiên.
Tìm phần tử có giá trị k¶
Đoạn mã sau tìm phần tử có giá trị k bằng cách dùng hàm find()
.
vec.end()
trỏ ra sau vector, chứ không phải trỏ vào phần tử cuối.
Nội dung này sẽ cập nhật sau khi chủ thớt được đồ-nét :)
Output:
Tìm phần tử thỏa điều kiện cho trước¶
Giả sử ta muốn tìm phần tử vừa chẵn vừa lớn hơn 5.
Trước hết, ta viết hàm kiểm tra điều kiện vừa chẵn vừa lớn hơn 5, đặt là hàm check()
.
Sau đó, ta truyền hàm check()
vừa viết vào hàm find_if()
.
Output:
Đếm phần tử thỏa điều kiện cho trước¶
Giả sử ta muốn đếm số phần tử vừa chẵn vừa lớn hơn 5.
Vẫn dùng hàm check()
như trên, lần này ta truyền check()
vào hàm count_if()
.
Output:
Lọc ra các phần tử thỏa và không thỏa điều kiện cho trước¶
Giả sử ta muốn lọc/trích ra các phần tử vừa chẵn vừa lớn hơn 5.
Vẫn dùng hàm check()
như trên, lần này ta truyền check()
vào hàm copy_if()
và đính kèm hàm back_inserter()
dành cho vector kết quả.
Output:
Tương tự, ta dùng hàm remove_copy_if()
để lọc ra các phần tử không thỏa điều kiện.
Output:
Toàn bộ chương trình¶
Chương trình C++ hoàn chỉnh đặt tại Gist của GitHub.
Nội dung này sẽ cập nhật sau khi chủ thớt được đồ-nét :)