创作过程中难免有不足,若您发现本文内容有误,恳请不吝赐教。
提示:以下是本篇文章正文内容,下面案例可供参考。
一、capacity
#include<iostream>
using namespace std;
int main()
{
string s;
size_t old = s.capacity();
cout << "初始:" << s.capacity() << endl;
for (size_t i = 0; i < 100; i++)
{
s.push_back('x');
if (s.capacity() != old)
{
cout << "扩容:" << s.capacity() << endl;
old = s.capacity();
}
}
return 0;
}
二、reserve
#include<iostream>
using namespace std;
int main()
{
string s;
s.reserve(100);
size_t old = s.capacity();
cout << "初始:" << s.capacity() << endl;
for (size_t i = 0; i < 100; i++)
{
s.push_back('x');
if (s.capacity() != old)
{
cout << "扩容:" << s.capacity() << endl;
old = s.capacity();
}
}
return 0;
}
reserve价值:确定大概知道要多少空间,提前开好,减少扩容,提高效率。
三、resize
#include<iostream>
using namespace std;
int main()
{
string s = "hello world";
cout << "s.size():" << s.size() << endl;
s.resize(13);
cout << "s.size():" << s.size() << endl;
cout << "s为:" << s << endl;
s.resize(18, 'x');
cout << "s.size():" << s.size() << endl;
cout << "s为:" << s << endl;
s.resize(8);
cout << "s.size():" << s.size() << endl;
cout << "s为:" << s << endl;
return 0;
}
四、push_back 、append 、+= 、+
#include<iostream>
using namespace std;
int main()
{
string ss = "hell";
string s;
s.push_back('o');
cout << s << endl;
s.append("ofjdj");
cout << s << endl;
s.append(ss);
cout << s << endl;
s += "---";
cout << s << endl;
s += ss;
cout << s << endl;
string ret1 = ss + "hello";
cout << ret1 << endl;
return 0;
}
五、insert 、erase 、repalce
#include<iostream>
using namespace std;
int main()
{
std::string s("hello world");
s.insert(0, 1, 'x');
cout << s << endl;
s.insert(s.begin(), 1, 'x');
cout << s << endl;
s.erase(4);
cout << s << endl;
std::string d("hello world");
d.replace(5, 1, "2025");
cout << d << endl;
return 0;
}
insert/erase/repalce能不用就尽量不用,因为他们都涉及挪动数据,效率不高。以及接口设计复杂繁多,需要时查一下文档即可。
六、find 、substr
#include<iostream>
using namespace std;
int main()
{
//文件取后缀
string s1 = "test.cpp";
size_t i = s1.find('.');
string s2 = s1.substr(i);
cout << s2 << endl;
string s3 = "test.cpp.tar.zip";
size_t j = s1.rfind('.');
string s4 = s3.substr(j);
cout << s4 << endl;
// 找协议、域名、资源名
string s5("https://legacy.cplusplus.com/reference/string/string/rfind/");
string sub1, sub2, sub3;
size_t i1 = s5.find(':');
if (i1 != string::npos)
sub1 = s5.substr(0,i1);
else
cout << "没有找到i1" << endl;
cout << "协议名:" << sub1 << endl;
size_t i2 = s5.find('/',i1+3);
if (i2 != string::npos)
sub2 = s5.substr(i1 + 3, i2 - (i1 + 3));
else
cout << "没有找到i2" << endl;
cout << "域名:" << sub2 << endl;
sub3 = s5.substr(i2 + 1);
cout << "资源名:" << sub3 << endl;
return 0;
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了c++的基础知识。