Cắt forward_list trong C++ | Laptrinhcanban.com

Cắt forward_list trong C++

Hướng dẫn cách cắt forward_list trong C++. Bạn sẽ học được cách sử dụng hàm front() để cắt forward_list trong C++ sau bài học này.

Cắt phần tử đầu tiên từ forward_list trong C++ bằng hàm front

Hàm front là một hàm thành viên trong class std:forward_list, có tác dụng tham chiếu đến phần tử đầu tiên trong forward_list.

Tương tự với hàm front() là hàm begin() trong forward_list, tuy nhiên khác với hàm begin() trả về con trỏ chỉ đến phần tử đầu tiên thì hàm front() sẽ trả về tham chiếu trực tiếp tới giá trị của phần tử đó.

Bằng cách ứng dụng hàm front(), chúng ta không những có thể cắt ra giá trị của phần tử đầu tiên trong forward_list, mà còn có thể thay đổi giá trị của phần tử đầu tiên đó.

Trong list, hàm đối ngược với hàm front chính là hàm back(), tuy nhiên cần lưu ý là hàm back() không tồn tại trong forward_list C++, do forward_list chỉ là danh sách một chiều mà thôi.

Chúng ta sử dụng hàm front trong C++ với cú pháp sau đây:

f_lst.front();

Trong đó f_lst là forward_list cần cắt ra phần tử ban đầu. Hàm front() sẽ trả về tham chiếu tới phần tử đầu tiên của forward_list, qua đó chúng ta có thể cắt lấy giá trị của phần tử đầu tiên này, hoặc là gán một phần tử khác để thay đổi nó.

Lưu ý chúng ta không dùng hàm front() cho forward_list trống nhé.

Ví dụ cụ thể:

#include <iostream>
#include <forward_list>
using namespace std;

//Tạo hàm xuất forward_list
void dump(forward_list<int>& f_lst)
{
for (auto x: f_lst) {
cout << " "<< x ;
}
cout << endl;
}

int main() {
forward_list<int> f_lst{3, 1, 4, 1, 5, 7, 9};
dump(f_lst);

//Tạo tham chiếu tới vị trí phần tử đầu tiên của forward_list
int front_element = f_lst.front();
cout << front_element << endl;

//Thay đổi phần tử đầu tiên
f_lst.front() = 2;
dump(f_lst);

return 0;
}

Kết quả:

3 1 4 1 5 7 9
3
2 1 4 1 5 7 9

Cắt phần tử cuối cùng từ forward_list trong C++

Để cắt phần tử cuối cùng từ forward_list trong C++, chúng ta có thể sử dụng tới cặp dấu [] và index để tham chiếu trực tiếp tới phần tử đó.

Lưu ý là index của phần tử cuối cùng thì bằng số phần tử trong forward_list trừ đi 1 đơn vị, tuy nhiên thì khác với các với các Containers library khác như list hay vector thì hàm size() dùng để lấy số phần tử lại không tồn tại trong forward_list, do đó chúng ta cần phải sử dụng tới hàm thay thế là template function là distance() mà Kiyoshi đã hướng dẫn trong bài Lấy và thay đổi kích thước của forward_list trong C++ (distance, resize)

Ví dụ cụ thể:

#include <iostream>
#include <forward_list>
using namespace std;

int main() {
forward_list<int> f_lst{3, 1, 4, 1, 5, 7, 9};
int length = std::distance(f_lst.begin(), f_lst.end());

/*Cắt phần tử cuối cùng*/
cout << f_lst[length - 1];

return 0;
}

Kết quả:

3 1 4 1 5 7 9
3
2 1 4 1 5 7 9

Cắt một phạm vi từ forward_list

Để cắt một phạm vi từ forward_list ban đầu, chúng ta sử dụng vòng lặp hoặc trình lặp để truy cập tuần tự vào các phần tử trong forward_list để lấy các giá trị trong phạm vi cần cắt. Sau đó, chúng ta lưu các giá trị này vào forward_list kết quả là xong.

Và để thêm phần tử vào forward_list, chúng ta sẽ cần dùng đến hàm push_back() trong C++ mà Kiyoshi đã hướng dẫn trong bài .

Ví dụ cụ thể:

#include <iostream>
#include <forward_list>
using namespace std;

//Tạo hàm xuất forward_list
void dump(forward_list<int>& f_lst)
{
for (auto x: f_lst) {
cout << " "<< x ;
}
cout << endl;
}

int main() {
forward_list<int> f_lst{3, 1, 4, 1, 5, 7, 9};
dump(f_lst);

//Khai báo forward_list chứa kết quả
forward_list<int> lst2;

//Khai báo phạm vi cắt
int start = 2, end = 4;

//Truy cập vào phạm vi để lấy và lưu các phần tử vào forward_list kết quả
int count = 0;
for (int x: f_lst) {
count += 1;
if (count >= 2 && count <= 4)
lst2.push_back(x);
}

dump(lst2);

return 0;
}

Kết quả:

3 1 4 1 5 7 9
1 4 1

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách cắt forward_list trong C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.