C++Primer Plus U4读书笔记 vector array string + primer

模板类 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值