PoEdu培训 C++班 第十课 STL的应用 - string
文章类别: 培训笔记 0 评论

PoEdu培训 C++班 第十课 STL的应用 - string

文章类别: 培训笔记 0 评论

STL的应用

std是一个 命名空间
库函数是由编译器提供的, 是根据C语言标准来提供的

string类

需要包含 #include <string>

// 例子
#include <string>

// 可以避免命名空间污染, 并且方便使用string
using std::string;

int main()
{
    string demo;
    
    return 0;
}

string类 是基于 basic_string类 的
Alt string类

构造函数

迭代器

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() == true

max_size() // 能够存放最大的
capacity() // 在当前不动态改变的时候 存放的最大值

capacity()的返回值
初始是15, 超过15时就变成了31
调用 resize(100) 后, 它又变了 111, size变成了100

resize(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个M

assign() // 赋值

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 * 指针
泛型编程是基于重载机制上的, 如果没有重载机制, 那么泛型编程将不能实现.

如有错误,请提出指正!谢谢.

回复