c++中string的assign方法使用
string的实际.h和.cpp文件是basic_string.h
和basic_string.tcc
,所以string中assign也在这两个文件声明和定义;
1.assign的声明:
basic_string& assign(const basic_string& __str)
basic_string& assign(basic_string&& __str)
basic_string& assign(const basic_string& __str, size_type __pos, size_type __n)
basic_string& assign(const _CharT* __s, size_type __n)
basic_string& assign(const _CharT* __s)
basic_string& assign(size_type __n, _CharT __c)
basic_string& assign(_InputIterator __first, _InputIterator __last)
basic_string& assign(initializer_list<_CharT> __l)
2.assign的一个定义:
其实string的赋值运算符basic_string& operator=(const basic_string& __str)
就是调用了assign方法。赋值运算符就是简单的包装了assign方法:
basic_string&
operator=(const basic_string& __str)
{ return this->assign(__str); }
其中:basic_string& assign(const basic_string& __str)
的定义:
basic_string&
assign(const basic_string& __str)
{
this->_M_assign(__str);
return *this;
}
所以:
string s1;
string s2;
s1=s2;
s1.assign(s2);是等效的
例子:
#include <iostream>
#include <string>
#include <vector>
using std::vector;
using std::string;
using std::cin;
using std::cout;
using std::endl;
void test01()
{
string s1;//默认初始化,s1是一个空的字符串
string s2(s1);//s2是s1的副本,使用了拷贝构造函数
string s3 = s2;//s3是s2的副本,也就是s1的副本,使用赋值运算符
string s4("4444");//s4是字面值"4444"的副本,除了最后一个字符
string s5="5555";//拷贝初始化,同上
string s6(4,'6');//初始化n个字符'6‘串成的字符串
string s7 = string(4,'7');//拷贝初始化,同上
s1.assign(s6);
s2 = "2222";
vector<string> vecStr{s1,s2,s3,s4,s5,s6,s7};
for(const auto &value:vecStr)
{
cout<<"sddress:"<<&value<<" value:"<<value<<endl;
}
}
int main()
{
::test01();
return 0;
}
运行结果图: