首先新建cpp文件,并创建string变量str1,然后str1.insert可以看到insert函数有8个重载函数
然后完善insert函数,并转到定义,找到insert函数的定义
// 01. string& isnert(unsigned int offset, const string& obj); 调用了02_Myt& insert(size_type _P0, const _Myt& _X) { return (insert(_P0, _X, 0, npos)); } // 02. string& insert(unsigned int offset, const string& obj, unsigned int start_id, unsigned int end_id); _Myt& insert(size_type _P0, const _Myt& _X, size_type _P, size_type _M){ if (_Len < _P0 || _X.size() < _P) _Xran(); size_type _N = _X.size() - _P; if (_N < _M) _M = _N; if (npos - _Len <= _M) _Xlen(); if (0 < _M && _Grow(_N = _Len + _M)) { _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0, _Len - _P0); _Tr::copy(_Ptr + _P0, &_X.c_str()[_P], _M); _Eos(_N); } return (*this); }// 03. string& insert(unsigned int offset, const char* str, unsigned int len);_Myt& insert(size_type _P0, const _E *_S, size_type _M){ if (_Len < _P0) _Xran(); if (npos - _Len <= _M) _Xlen(); size_type _N; if (0 < _M && _Grow(_N = _Len + _M)) { _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0, _Len - _P0); _Tr::copy(_Ptr + _P0, _S, _M); _Eos(_N); } return (*this); }// 04. string& insert(unsigned int offset, const char* str); 调用了03_Myt& insert(size_type _P0, const _E *_S) { return (insert(_P0, _S, _Tr::length(_S))); } // 05. string& isnert(unsigned int offset, unsigned len, char ch); _Myt& insert(size_type _P0, size_type _M, _E _C){ if (_Len < _P0) _Xran(); if (npos - _Len <= _M) _Xlen(); size_type _N; if (0 < _M && _Grow(_N = _Len + _M)) { _Tr::move(_Ptr + _P0 + _M, _Ptr + _P0, _Len - _P0); _Tr::assign(_Ptr + _P0, _M, _C); _Eos(_N); } return (*this); }// 06. iterator insert(iterator begin, char ch); //迭代器iterator insert(iterator _P, _E _C) { size_type _P0 = _Pdif(_P, begin()); insert(_P0, 1, _C); return (begin() + _P0); }// 07. void insert(iterator begin, unsigned len, char ch);void insert(iterator _P, size_type _M, _E _C){ size_type _P0 = _Pdif(_P, begin()); insert(_P0, _M, _C); }// void insert(iterator begin, interator fiart, inerator last);void insert(iterator _P, _It _F, _It _L){ replace(_P, _P, _F, _L); }
测试代码
string str1 = "Hello_V_Welcome";string str2 = "World";string str3;cout << "str1 -> " << str1 << "\t str2 -> " << str2 << endl << endl;// 01. string& insert(unsigned int offset, const string& obj); 调用了02cout << "string& insert(unsigned int offset, const string& obj);" << endl;str3 = str1.insert(6, str2);cout << "str3 = str1.insert(6, str2), str1 -> " << str1 << "; str3 = -> " << str3 << endl;cout << "###################################" << endl << endl;// 02. string& insert(unsigned int offset, const string& obj, unsigned int start_id, unsigned int end_id); str1 = "Hello_V_Welcome";str3 = "";cout << "string& insert(unsigned int offset, const string& obj, unsigned int start_id, unsigned int end_id);" << endl;str3 = str1.insert(8,str2, 3, 2); cout << "str3 = str1.insert(8,str2, 3, 2), str1 -> " << str1 << "; str3 = -> " << str3 << endl;cout << "###################################" << endl << endl;// 03. string& insert(unsigned int offset, const char* str, unsigned int len);str1 = "Hello_V_Welcome";cout << "void insert(unsigned int offset, const char* str, unsigned int len);" << endl;str3 = str1.insert(6, "World", 5);cout << "str3 = str1.insert(6, \"World\", 5), str1 -> " << str1 << "; str3 = -> " << str3 << endl;cout << "###################################" << endl << endl;// 04. string& insert(unsigned int offset, const char* str); 调用了03str1 = "Hello_V_Welcome";cout << "void insert(unsigned int offset, const char* str);" << endl;str3 = str1.insert(7, "World");cout << "str3 = str1.insert(7, \"World\"), str1 -> " << str1 << "; str3 = -> " << str3 << endl;cout << "###################################" << endl << endl;// 05. string& isnert(unsigned int offset, unsigned int len, char ch); str1 = "Hello_V_Welcome";cout << "void insert(unsigned int offset, unsigned int len, char ch);" << endl;str3 = str1.insert(6, 5, '$');cout << "str3 = str1.insert(6, 5, '$'), str1 -> " << str1 << "; str3 = -> " << str3 << endl;cout << "###################################" << endl << endl;// 06. iterator insert(iterator begin, char ch); //迭代器str1 = "Hello_V_Welcome";cout << "void insert(iterator begin, char ch);" << endl;str1.insert(str1.begin()+7, '@');cout << "str1.insert(str1.begin()++7, '@') -> " << str1 << endl;cout << "###################################" << endl << endl;// 07. void insert(iterator begin, unsigned len, char ch);str1 = "Hello_V_Welcome";cout << "void insert(iterator begin, unsigned len, char ch);" << endl;str1.insert(str1.begin()+5, 5, '#');cout << "str1.insert(str1.begin()+5, 5, '#') -> " << str1 << endl;cout << "###################################" << endl << endl;// 08. void insert(iterator begin, interator fisrt, inerator last);str1 = "Hello_V_Welcome";cout << "void insert(iterator begin, interator first, inerator last);" << endl;str1.insert(str1.begin()+5, str2.begin(), str2.end());cout << "str1.insert(str1.begin()+5, str2.begin(), str2.end()) -> " << str1 << endl;cout << "###################################" << endl << endl;
查看运行结果
同前面介绍的一样,下标不允许有负值。