STL学习笔记(string)
动机
C++标准程序库中的string class使我们可以将string当做一个一般型别。我们可以像对待基本型别那样地复制、赋值和比较string,
再也不必但系内存是否足够、占用的内存实际长度等问题。
操作函数
1.构造函数和析构函数
下表列出string的所有构造函数和析构函数

2.大小和容量
size()和length():返回string中现有的字符个数。
max_size():返回一个string最多能够包含的字符数,这个跟机器本身的限制有关系。
capacity():重新分配内存之前,string所能包含的最大字符数。
3.元素存取
string允许我们对齐所办函字符进行读写。有两种方法可以访问单一字符:
subscript(下标)操作符[]和成员函数at()。两者都返回某指定索引的对应位置上的字符。
4.比较
string支持常见的比较操作符,操作数可以是string或C-string:
5.更改内容
赋值:可以用operator=对字符串赋新值。新值可以是string、C-string或单一字符。
交换:string提供了一个特殊的swap()函数用来交换两字符串内容。
6.安插和移除字符
string提供许多成员函数用于安插、移除、替换、擦除字符。
我们可以使用operator+=、append()和push_back()添加字符。可以使用erase()函数来移除字符
7.字串和字符串接合
我们可以使用成员函数substr()从string身上提取出子字符串。例如:
std::string s("interchangeability");
s.substr() //return a copy of s
s.substr() //return string("ability")
s.substr(,) //returns string("change")
s.substr(s.find('c')) //returns string("changeability")
8.搜索和查找
下表列出string的搜寻函数

所有搜寻函数都返回符合搜寻条件之字符区间内的第一个字符的索引。如果搜寻不成狗,则返回npos。
这些搜寻函数都采用下面的参数方案:
第一参数总是被搜寻的对象;
第二参数(可有可无)指出string内的搜寻起点(索引)
第三参数(可有可无)指出搜寻的字符个数
String对迭代器的支持
string是字符的有序群集。所以C++标准程序库为string提供了相应接口,以便将字符串当做STL容器使用。
string迭代器是random access(随机存取)迭代器。所以任何STL算法都可与它搭配。
下表列出了string的迭代器操作函数

下面是string迭代器的运用实例
#include <string>
#include <iostream>
#include <algorithm>
using namespace std; bool nocase_compare(char c1,char c2)
{
return toupper(c1)==toupper(c2);
} int main()
{
string s1("This is a string");
string s2("STRING");
if(s1.size()==s2.size()&&equal(s1.begin(),s1.end(),s2.begin(),nocase_compare))
cout<<"the strings are equal"<<endl;
else
cout<<"the strings are not equal"<<endl;
string::iterator pos;
pos=search(s1.begin(),s1.end(),s2.begin(),s2.end(),nocase_compare);
if(pos==s1.end())
cout<<"s2 is not a substring of s1"<<endl;
else
cout<<'"'<<s2<<"\" is a substring of \""
<<s1<<"\"(at index "<<pos-s1.begin()<<")"<<endl;
}
STL学习笔记(string)的更多相关文章
- Effective STL 学习笔记: 多用 vector & string
Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一 ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记:19 ~ 20
Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
- Effective STL 学习笔记 32 ~ 33
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 30: 保证目标区间足够大
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...
- Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...
- Effective STL 学习笔记: Item 22 ~ 24
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...
随机推荐
- app:compileDebugNdk,NDK
Error:Execution failed for task ':app:compileDebugNdk'. > Error: Your project contains C++ files ...
- Scala学习随笔——Scala起步
实验楼学习Scala语言的笔记,课程网址为https://www.shiyanlou.com/courses/490 一.Scala简介 Scala 是一门多范式的编程语言,类似于 Java .设计初 ...
- (3) python--matplotlib
(一)1.如何绘制散点图 import numpy as np import matplotlib.pyplot as plt # 如何绘制散点图 # 先随机生成数据 x = np.array(ran ...
- centos6.5 安装mysql
在centos6.5上通过yum安装mysql: 1. yum list |grep mysql (查看版本) 2.安装mysql yum install -y mysql-server mysq ...
- UVA 1395 Slim Span 最小生成树
题意: 给你一个图,让你求这个图中所有生成树中满足题目条件的,这个条件是生成树中最长边与最短边的差值最小. 思路: 根据最小瓶颈生成树的定义:在一个有权值的无向图中,求一个生成树最大边的权值尽量小.首 ...
- UITableView中的dequeueReusableCellWithIdentifier的方法
在使用UITableView控件的时候,datasource的代理方法经常会使用到下面的方法来加载UITableView的数据显示 - (UITableViewCell *)tableView:(UI ...
- init_machine 在Kernel中被调用的过程
以tiny4412为例: arch/arm/mach-exynos/mach-tiny4412.c MACHINE_START(TINY4412, "TINY4412") /* M ...
- 在ArcGIS Desktop中进行三参数或七参数精确投影转换
转自 在ArcGIS Desktop中进行三参数或七参数精确投影转换 ArcGIS中定义的投影转换方法,在对数据的空间信息要求较高的工程中往往不能适用,有比较明显的偏差.在项目的前期数据准备工 ...
- tomcat重启应用和tomcat重启是两回事。热部署就是重启应用
tomcat重启应用和tomcat重启是两回事.热部署就是重启应用 tomcat重启应用和tomcat重启是两回事.热部署就是重启应用 tomcat可以设置检测到新的class后重启该应用(不是重启t ...
- MessageFormat.format 字符串的模板替换
项目目前在消息的模版,模版中需要替换很多参数,比方说“用户名”,“日期”等等.不过目前没有想到更好的替换参数的方法,所以目前只能使用一个比较简单的方式来实现.这个方式太死板,参数对应必须要在代码中写死 ...