string

C++11后(包括)使用std::string不再需要包含头文件,#include <string>

string是字符容器,内部维护一个动态字符数组。功能强大,自动分配内存与释放,但效率略低,占用资源略多。

NBTS(null-terminated string)

C语言风格字符串,即以0('\0')为结束的字符串。而string容器没有此特点。

string::npos

静态常量成员string::npos为string所能容纳的最大长度,通常是unsigned long long的最大值,18446744073709551615。

Constructor

函数原型 作用
string(); 创建一个长度为0的string容器
string(const char* s); 依据s指向的NBTS构造string容器
string(const string& str, size_t pos = 0, size_t n = npos); 依据str对象深拷贝构造string容器,或从pos下标开始长度为n构造string容器
template<class InputIterator> string(InputIterator first,InputIterator last); 将string对象初始化为区间[first,last]内的字符,其中begin和end是迭代器,其行为就像指针,用于指定位置。
string(const char* s, size_t n); 依据s指向的NBTS的前n个字符构造string容器,即使超过了NBTS结尾
string(size_t n, char c); 以n个c字符构造string容器

容量大小操作

typedef unsigned long long size_t

//capacity >= size == length
函数原型 作用
size_t capacity() const; 返回容器当前容量
size_t size() const; 返回当前容器字符串长度
size_t length() const; 返回当前容器字符串长度
bool empty() const; 判断容器是否为空
void clear(); 清空容器
void resize(size_t length, char c = 0); 把容器实际大小设为legnth,若减小,则截断多余部分,若增大,则用字符c填充

内容操作

函数原型 作用
char& operator[](int n); 返回容器的第n个元素
char& at(int n); 返回容器的第n个元素,越界时抛出out_of_range异常
const char* c_str() const; 以只读NBTS形式返回容器中元素首地址
const char* data() const; 返回容器中元素首地址

赋值操作

作用参考string容器的构造函数

函数原型
string& operator=(const char* s);
string& operator=(const string&s);
string& operator=(char c);
string& assign(const char* s);
string &assign(const char* s, size_t n);
string& assign(const string& str);
string& assign(size_t n, char c);
string& assign(const string& str, size_t pos = 0, size_t n = npos);
template<class InputIterator> string& assign(InputIterator first,InputIterator last);

拼接操作

函数原型 作用
string& operator+=(const string& str); 重载+=操作符,将string对象str连接到当前string对象后
string& operator+=(const char* s); 重载+=操作符,将C风格字符串s连接到当前string对象后
string& operator+=(const char c); 重载+=操作符,将字符c连接到当前string对象后
string& append(const char *s); 把C语言风格字符串s连接到当前string对象结尾
string &append(const char *s, size_t n); 把C语言风格字符串s的前n个字符连接到当前string对象结尾
string& append(const string&str); 将string对象str连接到当前string对象后
string& append(const string& s, int pos, int n); 把string对象s中从pos开始的n个字符连接到当前string对象结尾
string &append(size_t n, char c); 在当前string容器结尾添加n个字符c

交换操作

函数原型 作用
void swap(string& str); 把当前容器与str交换

如果数据量很小,交换的是容器中的内容,如果数据量比较大,交换的是动态数组的地址。

截取操作

函数原型 作用
string substr(size_t pos = 0, size_t n = npos) const; 返回pos开始的n个字符组成的子容器

比较操作

compare函数比较的依据为字典顺序,在>时返回 1,<时返回 -1,==时返回 0。

函数原型 作用
==, >, <, >=, <= 两string容器内容按字典顺序比较
int compare(size_t pos, size_t n, const string& str) const; 比较当前字符串从pos开始的n个字符组成的字符串与str的大小
int compare(size_t pos, size_t n, const string& str, size_t pos2, size_t n2)const; 比较当前字符串从pos开始的n个字符组成的字符串与str中pos2开始的n2个字符组成的字符串的大小
int compare(const char *s) const; 当前字符串与C语言风格字符串s比较
int compare(size_t pos, size_t n, const char* s) const; 比较当前字符串从pos开始的n个字符组成的字符串与C风格字符串s的大小
int compare(size_t pos, size_t n, const char* s, size_t pos2) const; 比较当前字符串从pos开始的n个字符组成的字符串与C风格字符串s中从pos2位置开始的n个字符组成的字符串的大小

查找操作

find为顺序查找,rfind(即reverse)为逆序查找。

函数原型 作用
size_t find(const string& str, size_t pos = 0) const; 从pos位置开始查找str第一次出现的下标
size_t find(const char* s, size_t pos = 0) const; 从pos位置开始查找C风格字符串s第一次出现的下标
size_t find(const char* s, size_t pos, size_t n) const; 从pos位置开始查找C风格字符串s的前n个字符第一次出现的位置
size_t rfind(const string& str, size_t pos = npos) const; 从pos位置开始查找str第一次出现的下标
size_t rfind(const char* s, size_t pos = npos) const; 从pos位置开始查找C风格字符串s第一次出现的下标
size_t rfind(const char* s, size_t pos, size_t n) const; 从pos位置开始查找C风格字符串s的前n个字符第一次出现的位置

替换操作

函数原型 作用
string& replace(size_t pos, size_t len, const string& str); 从pos位置开始len长度的内容被替换为字符串str
string& replace(size_t pos, size_t len, const string& str, size_t subpos, size_t sublen = npos); 从pos位置开始len长度的内容被替换为string对象str从位置subpos到sublen的内容
string& replace(size_t pos, size_t len, const char* s); 从pos开始len长度的内容被替换为C风格字符串s
string& replace(size_t pos, size_t len, const char* s, size_t n); 从pos位置开始len长度的内容被替换为C风格字符串s前n个字符大小的内容
string& replace(size_t pos, size_t len, size_t n, char c); 从pos位置开始len长度的内容被n个字符c替换

插入操作

函数原型 作用
string& insert(size_t pos, const char* s); 在pos位置插入C语言风格字符串s
string& insert(size_t pos, const char* s, size_t n); 在pos位置插入C语言风格字符串s前n个字符大小的内容。
string& insert(size_t pos, const string& str); 在pos位置插入str
string& insert(size_t pos, const string& str, size_t subpos, size_t sublen = npos); 在pos位置插入string对象str从位置subpos到位置sublen大小的内容
string& insert(size_t pos, size_t n, char c); 在pos位置插入n个字符c

删除操作

函数原型 作用
string& erase(int pos, int n = npos); 删除从pos开始的n个字符

vector容器

vector容器封装了动态数组。

使用时需包含头文件 #include<vector>

Constructor

函数原型 作用
vector(); 创建一个空的vector容器
vector(initializer_list<T> il); 使用统一初始化列表
vector(const vector<T>& v); 拷贝构造函数
vector(Iterator first, Iterator last); 用迭代器创建vector容器
vector(vector<T>&& v); 移动构造函数(C++11标准)
explicit vector(const size_t n); 创建vector容器,元素个数为n(容量和实际大小都是n)
vector(const size_t n, const T& value); 创建vector容器,元素个数为n,值均为value

容量大小操作

函数原型 作用
size_t capacity() const; 返回容器当前容量
size_t size() const; 返回当前容器字符串长度
bool empty() const; 判断容器是否为空
void clear(); 清空容器
void resize(size_t length, char c = 0); 把容器实际大小设为legnth,若减小,则截断多余部分,若增大,则用字符c填充

list容器

map容器

unordered_map容器