Thêm chèn forward_list trong C++ | Laptrinhcanban.com

Thêm chèn forward_list trong C++

Hướng dẫn cách thêm chèn forward_list trong C++. Bạn sẽ học được cách thêm và chèn phần tử vào forward_list trong C++ sau bài học này.

Chúng ta có 2 phương pháp để thêm hoặc chèn forward_list trong C++ như sau:

  • Hàm push_front : thêm phần tử vào đầu forward_list
  • Hàm insert_after: thêm phần tử vào vị trí bất kỳ trong forward_list

Lưu ý là khác với list thì do forward_list là danh sách một chiều nên không tồn tại hàm push_back để thêm phần tử vào cuối forward_list.

Thêm phần tử vào đầu forward_list C++ bằng hàm push_front

Hàm push_front là một hàm thành viên trong class std:forward_list, có tác dụng thêm một phần tử vào vị trí đầu tiên trong forward_list cũng như tăng độ dài của nó thêm một đơn vị.

Cú pháp sử dụng hàm push_front để thêm phần tử vào đầu forward_list như sau:

f_lst.push_front(value);

Trong đó f_lst là tên forward_list cần thêm phần tử value vào vị trí đầu tiên. Nếu phần tử thêm vào có kiểu khác với kiểu của forward_list thì nó sẽ được chuyển về kiểu của forward_list trước khi được thêm vào.

Hàm push_front thuộc kiểu void, do đó nó sẽ không trả giá trị. Bởi vậy nó sẽ thêm phần tử vào vị trí đầu tiên trong forward_list chứ không trả về chuỗi kết quả.

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);

f_lst.push_front(88);

dump(f_lst);

return 0;
}

Kết quả:

3 1 4 1 5 7 9
88 3 1 4 1 5 7 9

Có thể thấy phần tử 88 đã được thêm vào vị trí đầu tiên trong chuỗi ban đầu.

Lưu ý, nếu phần tử thêm vào có kiểu khác với kiểu của forward_list thì nó sẽ được chuyển về kiểu của forward_list trước khi được thêm vào. Ví dụ nếu thêm một ký tự vào một forward_list thuộc kiểu int, thì ký tự đó sẽ được chuyển về mã Unicode trước khi được thêm vào forward_list ban đầu như sau:

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

f_lst.push_front('a');
dump(f_lst);
// 97 3 1 4 1 5 7 9

Do mã Unicode của ký tự ‘a’ là 97 nên nó đã được chuyển về dạng int là 97, rồi mới được thêm vào forward_list ban đầu như trên.

Chèn 1 phần tử vào vị trí chỉ định trong forward_list C++ bằng hàm insert_after

Hàm insert_after là một hàm thành viên trong class std:list, có tác dụng chèn một hoặc nhiều phần tử vào đằng sau vị trí chỉ định trong list cũng như tăng độ dài tương ứng của nó.

Để chèn phần tử vào vị trí chỉ định trong forward_list C++, chúng ta sử dụng hàm insert_after với cú pháp sau đây:

lst.insert_after(itr, value);

Trong đó lst là forward_list ban đầu, value là phần tử cần chèn, và itr là trình lặp (iterator) trỏ đến vị trí cần chèn trong forward_list.

Ở đây trình lặp (iterator) là một vòng lặp có tác dụng giống như con trỏ, giúp truy cập đến các phần tử ở vị trí cụ thể trong forward_list.

Chúng ta có thể lấy trình lặp trỏ đến vị trí đầu tiên trong forward_list bằng hàm begin() cũng như giá trị tại đó như sau:

std::forward_list<int> lst{3, 4, 3, 2, 4, 3, 1};

int n = 5;
auto itr = lst.begin(); //Lấy trình lặp trỏ đến vị trí đầu tiên
cout << *itr //3

Khác với vector hay map, do trong forward_list chúng ta không thể truy cập vào vị trí ngẫu nhiên trong nó, nên để thay đổi trình lặp chỉ đến vị trí index thứ n trong forward_list, chúng ta không thể đơn giản cộng n vào trình lặp, mà cần phải di chuyển lần lượt qua từng vị trí, bằng toán tử ++ với đủ số vòng lặp.

Ví dụ, trong trường hợp cần chỉ đến vị trí index thứ 5 trong forward_list, chúng ta sẽ viết trình lặp p như sau:

int n = 5;
auto itr = lst.begin(); //Trình lặp trỏ đến vị trí đầu forward_list
for (int i=1; i <= n; i++ )
++itr;

Sau khi đã dịch chuyển trình lặp tới vị trí chỉ định cần chèn phần tử, chúng ta có thể đơn giản sử dụng hàm insert_after để chèn giá trị cần thiết vào đằng sau vị trí đó.

auto itr = lst.begin(); 
for (int i=1; i <= n; i++ )
++itr;

lst.insert_after(itr, value);

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);

auto itr = f_lst.begin();
int n;

//Thêm phần tử 55 vào đằng sau vị trí thứ 2
n=2;
for (int i=1; i <= n; i++ )
++itr;
f_lst.insert_after(itr, 55);
dump(f_lst);

//Thêm phần tử 22 vào đằng sau vị trí thứ 4
n=4;
itr = f_lst.begin();
for (int i=1; i <= n; i++ )
++itr;
f_lst.insert_after(itr, 22);
dump(f_lst);

return 0;
}

Kết quả:

3 1 4 55 1 5 7 9
3 1 4 55 1 22 5 7 9

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cách thêm chèn phần tử vào 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.