Thêm chèn phần tử deque trong C++ | Laptrinhcanban.com

Thêm chèn phần tử deque trong C++

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

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

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

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

Hàm push_front là một hàm thành viên trong class std:deque, có tác dụng thêm một phần tử vào vị trí đầu tiên trong deque cũng như tăng độ dài của nó thêm một đơn vị, bằng cách copy(hoặc di chuyển) giá trị sang phần tử được đó.

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

dq.push_front(value);

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

Ví dụ cụ thể:

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

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

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

dq.push_front(88);

dump(dq);

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

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

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

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

Hàm push_back là một hàm thành viên trong class std:deque, có tác dụng thêm một phần tử vào vị trí cuối cùng trong deque cũng như tăng độ dài của nó thêm một đơn vị, bằng cách copy(hoặc di chuyển) giá trị sang phần tử được đó.

Cú pháp sử dụng hàm push_back để thêm phần tử vào cuối deque như sau:

dq.push_back(value);

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

Ví dụ cụ thể:

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

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

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

dq.push_back(88);

dump(dq);

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

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

dq.push_back('a');
dump(dq);
// 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 deque ban đầu như trên.

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

Hàm emplace_front là một hàm thành viên trong class std:deque, có tác dụng thêm một phần tử vào vị trí đầu tiên trong deque cũng như tăng độ dài của nó thêm một đơn vị, bằng cách sử dụng hàm tạo của kiểu của giá trị được thêm.

Khác với hàm push_front sẽ thêm phần tử bằng cách copy một đối tượng hoặc giá trị vào trong deque thì hàm emplace_front sẽ sử dụng hàm tạo của kiểu giá trị và chèn trực tiếp vào đầu deque.

Và do hàm emplace_back sẽ tạo trực tiếp phần tử bên trong vector mà không cần phải qua việc copy (di chuyển) giá trị vào trong vector, nên nó được cho là có tốc độ xử lý nhanh hơn hàm push_front.

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

dq.emplace_front(value);

Trong đó dq là tên deque 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 deque thì nó sẽ được chuyển về kiểu của deque trước khi được thêm vào.

Hàm emplace_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 deque chứ không trả về chuỗi kết quả.

Ví dụ cụ thể:

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

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

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

dq.emplace_front(88);

dump(dq);

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

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

dq.emplace_front('a');
dump(dq);
// 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 deque ban đầu như trên.

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

Hàm emplace_back là một hàm thành viên trong class std:deque, có tác dụng thêm một phần tử vào vị trí cuối cùng trong deque cũng như tăng độ dài của nó thêm một đơn vị, bằng cách sử dụng hàm tạo của kiểu của giá trị được thêm.

Khác với hàm push_back sẽ thêm phần tử bằng cách copy một đối tượng hoặc giá trị vào trong deque thì hàm emplace_back sẽ sử dụng hàm tạo của kiểu giá trị và chèn trực tiếp vào cuối deque.

Và do hàm emplace_back sẽ tạo trực tiếp phần tử bên trong vector mà không cần phải qua việc copy (di chuyển) giá trị vào trong vector, nên nó được cho là có tốc độ xử lý nhanh hơn hàm push_back.

Cú pháp sử dụng hàm emplace_back để thêm phần tử vào cuối deque như sau:

dq.emplace_back(value);

Trong đó dq là tên deque 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 deque thì nó sẽ được chuyển về kiểu của deque trước khi được thêm vào.

Hàm emplace_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 deque chứ không trả về chuỗi kết quả.

Ví dụ cụ thể:

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

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

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

dq.emplace_back(88);

dump(dq);

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

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

dq.emplace_back('a');
dump(dq);
// 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 deque ban đầu như trên.

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

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

dq.insert(p, value);

Trong đó dq là deque ban đầu, value là phần tử cần chèn, và p là trình lặp trỏ đến vị trí cần chèn trong deque.

Ở đâ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 deque.

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

dq.begin() + i

Trong đó dq.begin() chỉ đến vị trí đầu tiên trong deque, và i là index của vị trí phần tử cần chỉ đến.

Kết hợp lại thì công thức để chèn 1 phần tử vào vị trí chỉ định trong deque C++ bằng hàm insert sẽ như sau:

dq.insert(dq.begin() + i, value);

Ví dụ cụ thể:

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

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

int main ()
{
deque<int> dq{3, 1, 4, 1, 5, 7, 9};
dq.insert(dq.begin()+2, 55); //Thêm phần tử 55 vào vị trí thứ 2
dump(dq);

dq.insert(dq.begin()+4, 22); //Thêm phần tử 22 vào vị trí thứ 4
dump(dq);
return 0;
}

Kết quả:

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 deque 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.