1.使用using声明
.using namespace spacename
.using namespace::name
2.标准库类型string
Initialization
.string s // default null string
.string s(s1) // copy initialization
.string s = s1 // 同上
.string s ("xxxx")
.string s = "xxxxx"
.string s(n, ‘c‘) // s初始化为连续n个字符c组成的串
.string s = {‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘0‘};
Manipulate
Iterator:
begin()
end()
Capacity:
size()
length()
capacity()
resize()
reserve()
clear()
empty()
Access:
[]
at()
front()
back()
Modifiers:
operator+=
append()
push_back()
insert()
erase()
swap()
String operations:
c_str()
data()
copy()
find()
substr()
compare()
Compare:
==
!=
> >=
< <=
Other:
is >> s
os << s
getline(is, s)
Note:
- length() & size(): length() 为C风格,size()为STL引入
- [] & at(): [] 当访问的下标超出时,不进行范围检查,其结果是未定义的;at()会进行范围检查,下标超出,抛出out_of_range异常
- c_str() & data(): c_str()返回一个null结尾的内容的指针;data()仅仅返回内容不包括null的指针,仅仅提供有效字符数据
- string对象中不能靠‘\0‘而截断字符串,只有在C风格字符串中‘\0‘才具有实际意义
如下,我们编写了一个teststring.cpp的程序用于测试
编译运行:
#g++ -Wall -g -std=c++0x teststring.cpp //默认生成可执行程序a.out
#./a.out
说明:
1.最开始s初始化为空字符串, 打印长度为0
2.s添加内容,即使有null字符,个数也计算在内, 故size为9;C风格字符串,始终以\0最为结束符,故size为5
3.使用C风格的字符串初始化或者添加到string对象中时,会在\0出截断,\0后的内容被丢弃;使用带\0的string对象初始化或者添加到新string对象中时,新string对象不会再\0出截断,如S2打印所示
附录:
图1
图2
Note:
从图1总可以开出s += ‘\0‘字符时,调用了push_back()函数,s的长度计数加1
由此推导,当 += c风格字符串时,追加的仅仅是strlen(cstr)的长度; 当+= string对象时,追加的是string.size()的长度
c_str() & data()
Note:
string对象不以空字符(null, ‘\0‘)标识字符串结尾
3. 范围for(range for) // c++11 add
for(range_declaration:range_expresssion)
loop_statement;
range_declaration: 一个变量声明,其为range_expression的序列的一个元素或引用;通常使用auto来检测其类型
range_expression: 能够表示为序列的表达式或花括号初始化列表
4.vector
Initialization
vector<T> v
vector<T> v1(v)
vector<T> v1 = v
vector<T> v {.....} // initialize-list
vector<T> v = {......}
vector<T> v(n, val)
vector<T> v(n)
Other
v.empty()
v.size()
v.push_back()
v[n]
== != > >= < <=
5.迭代器(iterator)