Chuyển tới nội dung chính

std::string::insert

#include <string>

//(1) Chèn string tại vị trí pos
string& insert( size_type pos, const string& str );

//(2) Chèn string str bắt đầu từ vị trí subpos với độ dài sublen vào vị trí pos của chuỗi hiện tại
string& insert( size_type pos, const string& str, size_type subpos, size_type sublen = npos );

//(3) Chèn chuỗi C-string vào vị trí pos
string& insert( size_type pos, const charT* s );

//(4) Chèn n ký tự đầu của chuỗi C-string vào vị trí pos
string& insert( size_type pos, const charT* s, size_type n );

//(5) Chèn n lần ký tự c vào vị trí pos
string& insert( size_type pos, size_type n, charT c );

//(6) Chèn ký tự c vào vị trí pos
iterator insert( const_iterator pos, charT c );

//(7) Chèn n lần ký tự c vào iterator pos
void insert( iterator pos, size_type n, charT c );

//(8) Chèn các phần tử từ phạm vi [first, last) vào vị trí pos
template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last);

//(9) Chèn initializer list vào vị trí pos
string& insert( const_iterator pos, std::initializer_list<charT> ilist );

//(10) Di chuyển string other vào vị trí pos của chuỗi hiện tại
string& insert( size_type pos, string&& other );

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.

Tham số

pos

  • (Các phiên bản 1, 2, 3, 4, 5, 10): Vị trí (index) trong chuỗi hiện tại trước vị trí mà nội dung mới sẽ được chèn vào.
  • (Các phiên bản 6, 7, 8, 9): Iterator trỏ đến vị trí trước vị trí mà nội dung mới sẽ được chèn vào.

str

  • Chuỗi std::string cần chèn (phiên bản 1, 2, 10).

subpos

  • Vị trí bắt đầu của chuỗi con trong str cần chèn (phiên bản 2).

sublen

  • Số lượng ký tự cần chèn từ chuỗi con trong str, bắt đầu từ subpos (phiên bản 2). Nếu sublen lớn hơn số ký tự còn lại từ subpos, hoặc nếu sublenstd::string::npos (giá trị mặc định), toàn bộ phần còn lại của str tính từ subpos sẽ được chèn.

s

  • Con trỏ đến chuỗi ký tự C-style (kết thúc bằng ký tự null) cần chèn (phiên bản 3, 4).

n

  • Số lượng ký tự đầu tiên từ chuỗi ký tự C-style s cần chèn (phiên bản 4).
  • Số lần lặp lại ký tự c (phiên bản 5, 7).

c

  • Ký tự cần chèn (phiên bản 5, 6, 7).

first

  • Input Iterator trỏ đến phần tử đầu tiên trong phạm vi cần chèn (phiên bản 8).

last

  • Input Iterator trỏ đến phần tử ngay sau phần tử cuối cùng trong phạm vi cần chèn (phiên bản 8).

ilist

  • initializer_list chứa các ký tự cần chèn (phiên bản 9).

other

  • Chuỗi string cần di chuyển (phiên bản 10).

Giá trị trả về

string&

  • Tham chiếu đến chính đối tượng std::string hiện tại sau khi đã thực hiện phép chèn. (Các phiên bản 1, 2, 3, 4, 5, 9, 10)

iterator

  • Iterator trỏ đến ký tự đầu tiên được chèn vào (hoặc pos nếu không có ký tự nào được chèn). (Phiên bản 6)

void

  • Không có giá trị trả về. (Phiên bản 7, 8)

Đặc điểm

  1. insert() thay đổi trực tiếp nội dung của chuỗi, không tạo ra một chuỗi mới.
  2. 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 insert().
  3. insert() có thể làm thay đổi size()capacity() của chuỗi.
  4. Nếu insert() 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.
  5. Các phiên bản của insert() 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(), std::out_of_range nếu pos vượt quá phạm vi).
  6. Khi sử dụng phiên bản 6, 7, 8, 9, iterator pos truyền vào phải là iterator hợp lệ của chuỗi hiện tại.
  7. Khi sử dụng phiên bản 10 (move), chuỗi other truyền vào sẽ ở trạng thái không xác định sau khi thực hiện.
  8. insert() thường được sử dụng để:
    • Chèn một chuỗi con vào trong một chuỗi khác tại một vị trí bất kỳ.
    • Thêm ký tự vào chuỗi tại một vị trí cụ thể.
    • Xây dựng chuỗi bằng cách chèn các phần nhỏ hơn vào các vị trí khác nhau.

Ví dụ

#include <iostream>
#include <string>
#include <vector>

int main() {
std::string str = "Hello";

// (1) Chèn string vào vị trí đầu
str.insert(0, "Hey ");
std::cout << "str after insert(0, \"Hey \"): " << str << std::endl;

// (2) Chèn một phần của string khác
std::string str2 = "abc!!!xyz";
str.insert(4, str2, 3, 3); // Chèn 3 ký tự "!!!" từ vị trí 3 của str2 vào vị trí 4 của str
std::cout << "str after insert(4, str2, 3, 3): " << str << std::endl;

// (3) Chèn chuỗi ký tự C-style
str.insert(str.size(), " C-string");
std::cout << "str after insert(str.size(), \" C-string\"): " << str << std::endl;

// (4) Chèn một phần của chuỗi ký tự C-style
const char* cstr = "*****";
str.insert(0, cstr, 3); // Chèn 3 ký tự đầu của cstr vào đầu chuỗi
std::cout << "str after insert(0, cstr, 3): " << str << std::endl;

// (5) Chèn một ký tự lặp lại nhiều lần
str.insert(str.size() - 1, 2, '?'); // Chèn 2 dấu '?' vào trước ký tự cuối cùng
std::cout << "str after insert(str.size() - 1, 2, '?'): " << str << std::endl;

// (6) Chèn một ký tự dùng iterator
str.insert(str.begin() + 5, '$');
std::cout << "str after insert(str.begin() + 5, '$'): " << str << std::endl;

// (7) Chèn một số ký tự dùng iterator
str.insert(str.begin() + 3, 2, '#');
std::cout << "str after insert(str.begin() + 3, 2, '#'): " << str << std::endl;

// (8) Chèn một phạm vi từ vector
std::vector<char> vec = {'X', 'Y', 'Z'};
str.insert(str.end(), vec.begin(), vec.end());
std::cout << "str after insert(str.end(), vec.begin(), vec.end()): " << str << std::endl;

// (9) Chèn một initializer list
str.insert(str.begin() + 10, {'+', '-', '='});
std::cout << "str after insert(str.begin() + 10, {'+', '-', '='}): " << str << std::endl;

// (10) Di chuyển một string vào vị trí
std::string other = " MOVE ";
str.insert(str.size(), std::move(other));
std::cout << "str after insert(str.size(), std::move(other)): " << str << std::endl;
std::cout << "other after move: '" << other << "'" << std::endl; // other giờ có thể rỗng

return 0;
}

Các hàm liên quan

appendNối thêm nội dung vào cuối chuỗi hiện tại
replaceThay thế một phần của chuỗi bằng một nội dung mới
substrTrích xuất một chuỗi con từ một chuỗi std::string hiện có
=Gán một giá trị mới cho một đối tượng std::string, thay thế nội dung hiện tại của nó
operator+=Nối thêm nội dung vào cuối chuỗi hiện tại