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

Thêm chèn list trong C++

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

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

  • Hàm push_front : thêm phần tử vào đầu list
  • Hàm push_back : thêm phần tử vào cuối list
  • Hàm insert: thêm phần tử vào vị trí bất kỳ trong list

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

Hàm push_front là một hàm thành viên trong class std:list, có tác dụng thêm một phần tử vào vị trí đầu tiên trong 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 list như sau:

lst.push_front(value);

Trong đó lst là tên 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 list thì nó sẽ được chuyển về kiểu của 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 list chứ không trả về chuỗi kết quả.

Ví dụ cụ thể:

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

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

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

lst.push_front(88);

dump(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 list thì nó sẽ được chuyển về kiểu của list trước khi được thêm vào. Ví dụ nếu thêm một ký tự vào một list thuộc kiểu int, thì ký tự đó sẽ được chuyển về mã Unicode trước khi được thêm vào list ban đầu như sau:

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

lst.push_front('a');
dump(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 list ban đầu như trên.

Thêm phần tử vào cuối list C++ bằng hàm push_back

Hàm push_back là một hàm thành viên trong class std:list, có tác dụng thêm một phần tử vào vị trí cuối cùng trong 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_back để thêm phần tử vào cuối list như sau:

lst.push_back(value);

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

Hàm push_back 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í cuối cùng trong list chứ không trả về chuỗi kết quả.

Ví dụ cụ thể:

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

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

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

lst.push_back(88);

dump(lst);

return 0;
}

Kết quả:

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

Có thể thấy phần tử 88 đã được thêm vào vị trí cuối cùng 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 list thì nó sẽ được chuyển về kiểu của list trước khi được thêm vào. Ví dụ nếu thêm một ký tự vào một list thuộc kiểu int, thì ký tự đó sẽ được chuyển về mã Unicode trước khi được thêm vào list ban đầu như sau:

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

lst.push_back('a');
dump(lst);
// 3 1 4 1 5 7 9 97

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 list ban đầu như trên.

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

Hàm insert 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 trước vị trí chỉ định trong list cũng như tăng tăng độ dài tương ứng của nó.

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

lst.insert(itr, value);

Trong đó lst là 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 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 list.

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

std::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 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 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 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 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 để chèn giá trị cần thiết vào đằng trước vị trí đó.

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

lst.insert(itr, value);

Ví dụ cụ thể:

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

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


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

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

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

//Thêm phần tử 22 vào đằng trước vị trí thứ 4
n=4;
itr = lst.begin();
for (int i=1; i <= n; i++ )
++itr;
lst.insert(itr, 22);
dump(lst);
return 0;
}

Kết quả:

3 1 4 1 5 7 9
3 1 55 4 1 5 7 9
3 1 55 4 22 1 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 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.