模板类 vector : 长度可变,位于自由存储区或堆中
#include <vector> //vector类头文件
using namespace std; //包含在名称空间std中 using std::vector
vector <int> vi; //创建一个包含0个int元素的vector对象vi,可在插入或添加值时自动调整长度,故0也无所谓
int n;
cin > >n;
vector <typename> vd(n) ; //创建一个名为vd的vector对象,存储n个类型为typename的元素。
注:n可为变量。
vector<T> v1; vector 保存类型为 T 对象。默认构造函数 v1 为空。
vector<T> v2(v1); v2 是 v1 的一个副本。
vector<T> v3(n, i); v3 包含 n 个值为 i 的元素。
vector<T> v4(n); v4 含有值初始化的元素的 n 个副本
v.empty() 如果 v 为空,则返回 true,否则返回 false。
v.size() 返回 v 中元素的个数。 返回值为vector<type>::size_type
v.push_back(t) 在 v 的末尾增加一个值为 t 的元素。
模板类 array : 长度固定,存储与栈中(静态内存分配)
#include <array> //头文件
using namespace std; //包含在std中
array <int ,5> ai;
array <double ,4> ad ={1.2,2.1,3.43,4.3};
array <typename,n> arr; //创建一个名为arr的array对象,包含n个类型为typename的元素
注:n不是变量,不可动态赋值。
数组、vector、array比较
1、都可用标准数组表示法访问各个元素:a[n];
2、array与数组存储在栈中,vector对象存储在自由存储区或堆中。
3、可以将一个array对象赋值给另一个array对象,数组需要逐个元素复制。
4、使用下表[]表示都可能越界,C++编译器均不进行错误检查。下标操作不会给vector类增加元素。
vector、array可用成员函数.at(n)访问元素,这个函数会进行边界检查,或用begin()、end()确定边界,与下标比较代价是运行时间更长。
在头文件中,必须总是使用完全限定的标准库名字。如果在头文件中放置 using 声明,就相当于在包含该头文件 using 的每个程序中都放置了同一 using,不论该程序是否需要 using 声明。通常,头文件中应该只定义确实必要的东西。请养成这个好习惯。
容器的iterator类型:每种容器类型都定义了自己的迭代器类型:
例:vector<int>::iterator iter;
每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素:
vector<int>::iterator iter = ivec.begin();
由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出末端迭代器”(off-the-end iterator)。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。
for (vector<int>::iterator iter = ivec.begin();iter != ivec.end(); ++iter)
*iter = 0; // set element to which iter refers to 0
const_iterator:该类型只能用于读取容器内元素,但不能改变其值。
for (vector<string>::const_iterator iter = text.begin();iter != text.end(); ++iter)
cout << *iter << endl; // print each element in text
const vector<int>::iterator cit = nums.begin(); 与const_iterator不同 cit值不能改变,cit++是错的
string 类
#include <string> //头文件
using std::string; //包含在标准库中,同上几个。
string.size() 返回类型为 string::size_type
cctype 头文件 中的函数
isalnum(c) 如果 c 是字母或数字,则为 True。
isalpha(c) 如果 c 是字母,则为 true。
iscntrl(c) 如果 c 是控制字符,则为 true
isdigit(c) 如果 c 是数字,则为 true。
isgraph(c) 如果 c 不是空格,但可打印,则为 true。
islower(c) 如果 c 是小写字母,则为 true。
isprint(c) 如果 c 是可打印的字符,则为 true。
ispunct(c) 如果 c 是标点符号,则 true。
isspace(c) 如果 c 是空白字符,则为 true。
isupper(c) 如果 c 是大写字母,则 true。
isxdigit(c) 如果是 c 十六进制数,则为 true。
tolower(c) 如果 c 大写字母,返回其小写字母形式,否则直接返回 c。
toupper(c) 如果 c 是小写字母,则返回其大写字母形式,否则直接返回 c。