STL的应用
std是一个 命名空间
库函数是由编译器提供的, 是根据C语言标准来提供的
string类
需要包含 #include <string>
// 例子
#include <string>
// 可以避免命名空间污染, 并且方便使用string
using std::string;
int main()
{
string demo;
return 0;
}string类 是基于 basic_string类 的 
- string类分为 string 和 wstring
string使用char构造
- basic_string< char >, 它是窄字节的
wstring使用wchar_t构造
- basic_string< wchar_t >, 它是宽字节的
构造函数
- string str0("111"); // 使用111填充string
- string str("12345678901234", 10); // 截取前10位
- string str1(10, 'A'); // 将'A'复制10位进行填充
- string str2(str, 3); // 从下标系3开始拷贝 从[3] (下标)开始取
- string str3(str, 3, 4); // 从下标系3开始截取4位 从[3] (下标)开始, 长度为4
string str4("123455", 3, 2); // 结果45
- 首先产生临时对象, 值为 123455
- 在从[3]开始取2位长度
迭代器
string str("12345678901234");
// C++方式的 字符串截取
string str5(str.begin() + 3, str.begin() + 5); // 45
string str6(str.find("4"), str.find("9")); //find 返回的是 位置常用方法
begin() // 返回指向string头部第一个元素的迭代器
end() // 返回指向string尾部最后一个元素的下一个位置的迭代器
size() // 字符串长度
length()// 字符串长度
empty() // 判断是否为空 返回bool
string str; // 其实传递的是一个""
str.size() == 0
str.length() == 0
str.empty() == true
str = "1";
str.size() == 1
str.length() == 1
str.empty() == false
str = "";
str.size() == 0
str.length() == 0
str.empty() == truemax_size() // 能够存放最大的
capacity() // 在当前不动态改变的时候 存放的最大值
capacity()的返回值
初始是15, 超过15时就变成了31
调用 resize(100) 后, 它又变了 111, size变成了100resize(100, 'a') //将不足的填充
str.find() // 返回的是下标
size_t pos = str.find('x');
if (pos == string::npos)
cout << "未找到";find("字符串") // 查找"字符串"
find是全匹配的, "1234567890" 查找 901 会找不到 找34 返回2
find("12", 4) 找不到, 会从[4]开始找, 查找字符也是一样情况
find("12348888", 0, 4); // 从第0位 找12348888的前4位rfind() // 倒序查找
string str = "812345678";
find_first_not_of('8') // 1
find_first_not_of('0') // 0
find_first_not_of("81234") // 返回5
find_fitst_not_of("5678") // 返回1
find_first_not_of("567") // 返回0 find函数之间可以进行配合
str.compare() // 比较, 相等返回0
+= // 只能接 char, char* 或者 string 类型
append() // 可以指定从哪里开始连接, 连接多长
append(10, 'M') 拼接10个Massign() // 赋值
c_str() // 返回有结束符的字符串
data() // 返回没有结束符的数据
模板/泛型编程
不仅仅能够类型自动推导类型, 还能进行方法生成.
// 模板小例子
#include <string>
#include <iostream>
using std::string;
using std::cout;
using std::endl;
// T 相当于一个 占位符
// 泛型
template<typename T> void Swap(T& lhs, T& rhs)
{
T temp;
temp = lhs;
lhs = rhs;
rhs = temp;
}
int main()
{
int iNum1 = 1, iNum2 = 2;
Swap(iNum1, iNum2);
float fNum1 = 1f, fNum2 = 2f;
Swap(fNum1, fNum2);
char cNum1 = 'H', cNum2 = 'L';
Swap(cNum1, cNum2);
cout << iNum1 << "<-->" << iNum2 << endl;
cout << fNum1 << "<-->" << fNum2 << endl;
cout << cNum1 << "<-->" << cNum2 << endl;
return 0;
}
// 可通过反汇编代码进行查看泛型的鼻祖就是 void * 指针
泛型编程是基于重载机制上的, 如果没有重载机制, 那么泛型编程将不能实现.
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-02-19 at 03:58 pm