目录
1.学习string,大多数的时候需要我们去看文档,推荐strtok – C++ Reference (cplusplus.com)
1.学习string,大多数的时候需要我们去看文档,推荐
strtok – C++ Reference (cplusplus.com)
在搜索栏内搜索string即可
查找我们需要的即可
2.string的三种遍历方式
1.下标+方括号(就像访问数组,仅仅string能使用)
int main()
{
string s2("hello wrold");
//3种遍历方式
//1.下标+[]
for (size_t i = 0; i < s2.size(); ++i)
{
cout << s2[i] << " ";
}
return 0;
}
2.迭代器(迭代器有点类似指针,所有的容器(list,heap等等)都可以使用)
int main()
{
//2.迭代器
//[begin(),end())end()返回的不是最后一个数据位置的迭代器,返回的是最后一个位置下一个位置
//也要注意的是,c++中凡是给迭代器一般都是给的{)左闭右开的区间
//迭代器是类似指针一样的东西\
string s2("hello wrold");
string::iterator it = s2.begin();
while (it != s2.end())
{
cout << *it << " ";
++it;
}
cout << endl;
return 0;
}
反向迭代器
int main()
{
反向迭代器
string s4("654321");
string::reverse_iterator rit = s4.rbegin();
while (rit != s4.rend())
{
*rit += 1;
cout << *rit << " ";
rit++;
}
}
3.范围for(c++11的标准,代码可读性高)
int main()
{
//c++11,3.范围for
//依次取容器的值赋给e,自动判断结束
string s2("hello wrold");
for (auto e : s2)
{
//e+=1;//需要引用,即for (auto& e : s2)
cout << e << " ";
}
cout << endl;
return 0;
}
3.resize和reserve的区别
1 resize:改变size
-
增加size,
容量不够会扩容
;没有第二个参数使用‘\0’,有则使用对应的 - 减少size,容量不会被改变;不会把‘\0’填入
int main()
{
string s2("hello wrold");
cout << "size:" << s2.size() << endl;
cout << "capacity:" << s2.capacity() << endl;
cout << s2 << endl;
//没有pos默认'\0'
s2.resize(20);//改变size,如果容量不够会扩容
cout << "size:" << s2.size() << endl;
cout << "capacity:" << s2.capacity() << endl;
cout << s2 << endl;
s2.resize(5,'x');//缩小,不会改变容量,也不会把‘x’填入
cout << "size:" << s2.size() << endl;
cout << "capacity:" << s2.capacity() << endl;
cout << s2 << endl;
return 0;
}
2 reserve:
- 增加容量,不会改变size;
int main()
{
string s2("hello wrold");
cout << "size:" << s2.size() << endl;
cout << "capacity:" << s2.capacity() << endl;
cout << s2 << endl;
string s3("hello world");
s3.reserve(50);
cout << "size:" << s3.size() << endl;
cout << "capacity:" << s3.capacity() << endl;
cout << s3 << endl;
return 0;
}
3.为什么使用reserve增容,而不是resize呢?
原因:
-
resize在改变容量时,size也会改变,(resize时改变size会填入‘\0’或者我们输入的字符,后面还是会再次增容)
-
reserve只会改变容量;
int main()
{
string s4;
s4.reserve(127);//先增容解决
//s4.resize(127);//改变容量的同是也改变size,后续还是会增容
size_t chOld = s4.capacity();
for (int ch = 0; ch < 127; ch++)
{
//多次增容效率低
if (chOld != s4.capacity())
{
cout << "增容" << chOld << "->" << s4.capacity()<<endl;
chOld = s4.capacity();
}
s4 += ch;
}
cout << s4 << endl;
return 0;
}
版权声明:本文为m0_72964546原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。