转载原文链接
1) pair
STL的头文件中描述了一个看上去非常简单的模版类pair,用来表示一个二元组或元素对,并提供了按照字典序对元素对进行大小比较运算符模版函数。
Example,想要定义一个对象表示一个平面坐标点,则可以:
pair<double, double> p;
cin >> p.first >> p.second;
可以直接对p.first 和p.second来进行操作。
2)vector 不定数组
vector<int> s;
// 定义一个空的vector对象,存储的是int类型的元素
vector<int> s(n);
// 定义一个含有n个int元素的vector对象
vector<int> s(first, last);
// 定义一个vector对象,并从由迭代器first和last定义的序列[first, last)中复制初值
s[i] // 直接以下标方式访问容器中的元素
s.front() // 返回首元素
s.back() // 返回尾元素
s.push_back(x) // 向表尾插入元素x
s.size() // 返回表长
s.empty() // 表为空时,返回真,否则返回假
s.pop_back() // 删除表尾元素
s.begin() // 返回指向首元素的随机存取迭代器
s.end() // 返回指向尾元素的下一个位置的随机存取迭代器
s.insert(it, val) // 向迭代器it指向的元素前插入新元素val
s.insert(it, n, val)// 向迭代器it指向的元素前插入n个新元素val
s.insert(it, first, last)
// 将由迭代器first和last所指定的序列[first, last)插入到迭代器it指向的元素前面
s.erase(it) // 删除由迭代器it所指向的元素
s.erase(first, last)// 删除由迭代器first和last所指定的序列[first, last)
s.reserve(n) // 预分配缓冲空间,使存储空间至少可容纳n个元素
s.resize(n) // 改变序列长度,超出的元素将会全部被删除,如果序列需要扩展(原空间小于n),元素默认值将填满扩展出的空间
s.resize(n, val) // 改变序列长度,超出的元素将会全部被删除,如果序列需要扩展(原空间小于n),val将填满扩展出的空间
s.clear() // 删除容器中的所有元素
s.swap(v) // 将s与另一个vector对象进行交换
s.assign(first, last)
// 将序列替换成由迭代器first和last所指定的序列[first, last),[first, last)不能是原序列中的一部分
// 要注意的是,resize操作和clear操作都是对表的有效元素进行的操作,但并不一定会改变缓冲空间的大小
// 另外,vector还有其他的一些操作,如反转、取反等,不再一一列举
// vector上还定义了序列之间的比较操作运算符(>、<、>=、<=、==、!=),可以按照字典序比较两个序列。
// 还是来看一些示例代码吧……
/*
* 输入个数不定的一组整数,再将这组整数按倒序输出
*/
3 ) string
字符串是程序中经常要表达和处理的数据,我们通常是采用字符数组或字符指针表示字符串。STL为我们提供了另一种使用起来更为便捷的字符串的表达方式:string。string类的定义在头文件中。
string类其实可以看作是一个字符的vector,vector上的各种操作都可以适用于string,另外,string类对对象还支持字符串的拼合、转换等操作。
常用操作
s+=str;//加个字符串
s+=”my name is jiayp”;//加个C字符串
s+=’a’;//加个字符
s.insert(0,”my name”);
s.insert(1,str); // 在指定位置插入字符串,其余字符向后退
string s=”il8n”;
s.replace(1,2,”nternationalizatio”);//从索引1开始的2个替换成后面的C_string
s.erase(13);//从索引13开始往后全删除
s.erase(7,5);//从索引7开始往后删5个
题取子串的函数是:substr(),形式如下:
s.substr();//返回s的全部内容
s.substr(11);//从索引11往后的子串
s.substr(5,6);//从索引5开始6个字符
int find(char c, int pos = 0) const;//从pos开始查找字符c在当前字符串的位置
int find(const char *s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
C 语言中的字符串处理函数
1 size_t strlen(const char *string);
获取字符串长度, 字符串结束符NULL不计算在内.
没有返回值指示操作错误.
2 char *strrev(char *string);
将字符串string中的字符顺序颠倒过来. NULL结束符位置不变.
返回调整后的字符串的指针.
3 char *_strupr(char *string);
将string中所有小写字母替换成相应的大写字母, 其它字符保持不变.
返回调整后的字符串的指针
4 char *_strlwr(char *string);
将string中所有大写字母替换成相应的小写字母, 其它字符保持不变.
返回调整后的字符串的指针.
5 char *strchr(const char *string, int c);
查找字符c在字符串string中首次出现的位置, NULL结束符也包含在查找中.
返回一个指针, 指向字符c在字符串string中首次出现的位置, 如果没有找到, 则返回NULL.
6 char *strrchr(const char *string, int c);
查找字符c在字符串string中最后一次出现的位置, 也就是对string进行反序搜索, 包含NULL结束符.
返回一个指针, 指向字符c在字符串string中最后一次出现的位置, 如果没有找到, 则返回NULL.
7char *strstr(const char *string, const char *strSearch);
在字符串string中查找strSearch子串.
返回子串strSearch在string中首次出现位置的指针. 如果没有找到子串strSearch, 则返回NULL. 如果子串strSearch为空串, 函数返回string值.
/*
* strstr函数
* 功能:在串中查找指定字符串的第一次出现
* 用法:char *strstr(char *strOne, char *strTwo);
* 据说strstr函数和KMP的算法效率差不多
*/
int main(int argc, const char * argv[])
{
char strOne[] = "Borland International";
char strTwo[] = "nation";
char *ptr;
ptr = strstr(strOne, strTwo);
std::cout << ptr << '\n';//输出 national
return 0;
}