文章目录
1.string 定义方式
1.1 string( )构造一个空字符串
void String_test()
{
std::sring s1;
}
1.2 string( const string& str)
拷贝构造一份str内的字符串
1.3string(const string& str, size_t pos, size_t len = npos)
使用在pos
个字符后len
个长度常量字符串初始化,如果len
不输入的化,使用缺省值npos
,可以理解为直接从字符串pos位置,直到\0停止。
npos的值是由-1转化正无符号整数,也就是int型最大的整数值:
1.4 string(const char* s)
string使用常量字符串初始化
void String_test()
{
std::string s2("hello");
}
我们在来看以下代码,这个代码也是能够初始化的。
void String_test()
{
std::string s2 = "hello";
}
为什么呢?
这里string有一个带参的构造函数,我们用常量字符串"hello"
给s2赋值时:1.
先构造了一个string类型的临时对象,传入常量字符串,然后s2再对临时对象拷贝构造。不过这里因为一个构造+拷贝构造被编译器直接优化成了一个构造函数。
本质其实就是隐式类型的转换。(单参数的构造函数支持隐式类型转换)
所以string s2 = "hello"
和string s2("hello")
都是一样的。
1.5 string (const char* s, size_t n)
复制s所指向的字符序列的前n个字符
std::string s4("goat",2);
1.6 string (size_t n, char c)
用n个c字符初始化
std::string s5(6,'a');
2. string插入
2.1push_back尾插
格式:
void push_back (char c);
int main()
{
string s;
s.push_back('1');
s.push_back('2');
s.push_back('3');
s.push_back('4');
return 0;
}
使用push_back插入。在vs2022环境下当capacity满时以1.5倍扩容。
2.2 insert插入
常用insert插入格式:
string& insert (size_t pos, const string& str);//在pos位置插入str
string& insert (size_t pos, const char* s);//在pos位置插入s指向的字符串
iterator insert (iterator p, char c);//在迭代器p的位置插入字符
例子:
int main()
{
string s("G");
string s1("a");
s.insert(1, "o");//Go,在pos位置上插入字符串
s.insert(2, s1);//Goa 在pos位置插入string对象
s.insert(s.end(), 't' );//迭代器插入t。Goat
return 0;
}
3. string的删除
3.1 pop_back尾删
格式:
void pop_back();
例子:
int main
{
string s("GAOT");
s.pop_back();
cout << s << endl;//GAO
return 0;
}
3.2 erase删除
格式:
string& erase (size_t pos = 0, size_t len = npos);//删除pos位置后len个字符
iterator erase (iterator p)