std::string::append
#include <string>
// (1) Nối chuỗi khác
string& append( const string& str );
// (2) Nối một phần của chuỗi khác
string& append( const string& str, size_type subpos, size_type sublen = npos );
// (3) Nối chuỗi ký tự C-style
string& append( const charT* s );
// (4) Nối một phần của chuỗi ký tự C-style
string& append( const charT* s, size_type n );
// (5) Nối một ký tự lặp lại nhiều lần
string& append( size_type n, charT c );
// (6) Nối một phạm vi (range)
template< class InputIt >
string& append( InputIt first, InputIt last );
// (7) Nối một initializer list (từ C++11)
string& append( std::initializer_list<charT> ilist );
Nối thêm nội dung vào cuối chuỗi hiện tại. Nó cung cấp nhiều tùy chọn linh hoạt hơn so với toán tử +=
, cho phép bạn nối thêm một phần của chuỗi, một số lần lặp lại của một ký tự, hoặc một phạm vi (range) từ iterator.
Tham số
str
- Chuỗi std::string cần nối (phiên bản 1, 2).
subpos
- Vị trí bắt đầu của chuỗi con trong
str
cần nối (phiên bản 2).
sublen
- Số lượng ký tự cần nối từ chuỗi con trong
str
, bắt đầu từsubpos
(phiên bản 2). Nếusublen
lớn hơn số ký tự còn lại từsubpos
, hoặc nếusublen
là std::string::npos (giá trị mặc định), toàn bộ phần còn lại củastr
tính từsubpos
sẽ được nối.
s
- Con trỏ đến chuỗi ký tự C-style (kết thúc bằng ký tự null) cần nối (phiên bản 3, 4).
n
- Số lượng ký tự cần nối từ chuỗi ký tự C-style
s
(phiên bản 4). - Số lần lặp lại ký tự
c
(phiên bản 5).
c
- Ký tự cần nối (phiên bản 5).
first
- Input Iterator trỏ đến phần tử đầu tiên trong phạm vi cần nối (phiên bản 6).
last
- Input Iterator trỏ đến phần tử ngay sau phần tử cuối cùng trong phạm vi cần nối (phiên bản 6).
ilist
- initializer_list chứa các ký tự cần nối (phiên bản 7).
Giá trị trả về
*this
- Tham chiếu đến chính đối tượng std::string hiện tại sau khi đã thực hiện phép nối.
Đặc điểm
append()
thay đổi trực tiếp nội dung của chuỗi, không tạo ra một chuỗi mới.- std::string tự động quản lý bộ nhớ, bạn không cần phải lo lắng về việc cấp phát hay giải phóng bộ nhớ khi sử dụng
append()
. append()
có thể làm thay đổicapacity()
của chuỗi nếu cần thiết để chứa thêm nội dung.- Nếu
append()
gây ra việc cấp phát lại bộ nhớ, nó có thể làm vô hiệu hóa (invalidate) tất cả các iterator, con trỏ và tham chiếu đến các phần tử của chuỗi. - Các phiên bản của
append()
có thể ném ra ngoại lệ nếu có lỗi xảy ra (ví dụ: std::bad_alloc nếu không thể cấp phát đủ bộ nhớ, std::length_error nếu độ dài kết quả vượt quámax_size()
). append()
thường được sử dụng để:- Mở rộng chuỗi bằng cách thêm nội dung vào cuối.
- Xây dựng chuỗi dần dần từ nhiều phần nhỏ hơn.
- Nối chuỗi, ký tự, hoặc phạm vi vào cuối chuỗi một cách linh hoạt.
Ví dụ
#include <iostream>
#include <string>
#include <vector>
int main() {
std::string str = "Hello";
// (1) Nối chuỗi khác
str.append(" World");
std::cout << "str after append(\" World\"): " << str << std::endl;
// (2) Nối một phần của chuỗi khác
std::string str2 = "!!!";
str.append(str2, 0, 2); // Nối 2 ký tự đầu của str2
std::cout << "str after append(str2, 0, 2): " << str << std::endl;
// (3) Nối chuỗi ký tự C-style
str.append(" C-string");
std::cout << "str after append(\" C-string\"): " << str << std::endl;
// (4) Nối một phần của chuỗi ký tự C-style
const char* cstr = "*****";
str.append(cstr, 3); // Nối 3 ký tự đầu của cstr
std::cout << "str after append(cstr, 3): " << str << std::endl;
// (5) Nối một ký tự lặp lại nhiều lần
str.append(4, '.'); // Nối 4 dấu chấm
std::cout << "str after append(4, '.'): " << str << std::endl;
// (6) Nối một phạm vi
std::vector<char> vec = {'a', 'b', 'c'};
str.append(vec.begin(), vec.end());
std::cout << "str after append(vec.begin(), vec.end()): " << str << std::endl;
// (7) Nối một initializer list
str.append({'d', 'e', 'f'});
std::cout << "str after append({'d', 'e', 'f'}): " << str << std::endl;
return 0;
}
Các hàm liên quan
operator+= | Nối thêm nội dung vào cuối chuỗi hiện tại |
assign | Gán nội dung mới cho chuỗi, thay thế nội dung hiện tại của nó |
insert | Chèn thêm nội dung (ký tự, chuỗi, hoặc phạm vi) vào bên trong chuỗi tại một vị trí xác định |
replace | Thay thế một phần của chuỗi bằng một nội dung mới |