C++第六天 2016-12-05 3.3-3.4

 

 

  • 3.3 标准类型库vector

    vector也常被称作为容器(container),它是一个类模板(class template

    编译器根据模板创建类或函数的过程称为实例化(instantiation

    vector<int> ivec; //ivec保存int类型的对象

    vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型。

    3.3.1 定义和初始化vector对象

    vector<string> svec 默认初始化,svec不包含任何元素

    vector最常见就是定义一个空vector然后运行时获取到的元素值再添加

    重要 列表初始化vector,使用花括号括起来0个或多个初始元素赋值给vector

    使用vector<int> ivec(10,-1)十个int类型的元素,初始化为-1

    如果不给定值,则会使用默认值去创建。比如vector<int> ivec(10) 100,如果这个类型不具有初始化值,则不会进行初始化,会报错。

    重要 区分列表初始值或者元素数量----------------------------------------------------

    一般认为使用括号()来进行元素数量初始化,{}进行列表初始化,但是如果{}不符合内容,则也可以将其视作()来使用。反之不可以

    3.2.2vector对象中添加元素

    使用vector的成员函数 push_back,当成vector对象尾元素加到末端

    重要 其它vector操作右表 3.5

    访问vector的操作和访问string的操作类似

    使用类似string中的for循原依旧可以遍历vector

    vector.sizesize_type类型,记住需要指定是何种vectoregvector<int>::size_type,大小的比较也和string相同。元素个数相同,且对应位置的元素值也相同,如果容量不同,但是相同位置相同,则是长的大于短的。如果有区别,则由第一个元素不同值进行确定。只有元素的值可比较时才可以比较。

    重要 计算vector内的索引,只要vector不是一个常量,就可以使用下标运算符返回元素索引。

    下标只能用于访问元素,不能用于添加元素。如果访问非法的地址,很容易造成缓冲区溢出(buffer overflow

    3.4迭代器介绍

    迭代器(iterator),对于标准库容器都可以使用迭代器,只有少数几种才支持下标操作。

    3.4.1 使用迭代器

    获取迭代器不是使用取地址符(&),有迭代器的类型同时拥有返回迭代器的成员。拥有beginend成员。end成员返回指向容器的尾元素的下一位置(one past the end),指向的是容器本不存在的尾后(off the end

    如果容器为空,则beginend返回的是同一个迭代器,都是尾后迭代器。

 

vector<T> vector<T> vector<T> vector<T> VI v 2 ( v 1 ) V2 = VI v3 (), Val) v4 0 ) vector<T> V5(a,b, vector<T> V5= { a, b, C · C · 表 3 . 4 : 初 始 化 vect 。 r 对 象 的 方 法 VI 是 一 个 空 vector , 它 潜 在 的 元 素 是 T 类 型 的 , 执 行 默 认 初 始 化 v2 中 包 含 有 VI 所 有 元 素 的 副 本 等 价 于 v2 (VI) , v2 中 包 含 有 VI 所 有 元 素 的 副 木 v3 包 含 了 n 个 重 复 的 元 素 , 每 个 元 素 的 值 都 是 val v4 包 含 了 n 个 重 复 地 执 行 了 值 初 始 化 的 对 象 v5 包 含 了 初 始 值 个 数 的 元 素 , 每 个 元 索 被 赋 予 相 应 的 初 始 值 等 价 于 v5 《 a , b , c .

 

 

VI 10 , v3 10 vector<int> vector<int> v2(10); v3 (10, v4(10, 1); 10 10 I

 

 

vector<string> v 7 (10}; vector<string> vs (10, "hi"); // fi 10 // v8 10

 

 

V.empty() v . s i 2 e 0 V.push back(t) v [ n ] VI VI = v2 ! = v2 C · 表 3 . 5 : vector 支 持 的 操 作 如 果 v 不 含 有 任 何 元 素 , 返 回 真 : 否 则 返 回 假 返 回 v 中 元 素 的 个 数 向 v 的 尾 端 添 加 一 个 值 为 t 的 元 素 返 回 v 中 第 n 个 位 置 上 元 素 的 引 用 用 v2 中 元 素 的 拷 贝 替 换 VI 中 的 元 素 用 列 表 中 元 素 的 拷 贝 替 换 VI 中 的 元 素 vi 和 v2 相 等 当 且 仅 当 它 们 的 元 素 数 量 相 同 且 对 应 位 置 的 元 素 值 都 相 同 顾 名 思 义 , 以 字 典 顺 序 进 行 比 较

 

 

练习3.17

int main(){

vector<string> v2;

string t  ;

while (cin >> t){

for (auto &c : t){

if (!isupper(c))

c = toupper(c);

}

v2.push_back(t);

cout << v2[v2.size() - 1] << endl;

 

}

 

return 0l;

}

3.18

int I = 42;

ivec.push_back(i)

 

3.19

vector<int> ivec (10)

vector<int> ivec  {1,1,1,1,1,1,1,1,1,1,1}

 

3.20

(1)

int main(){

int m;

vector<int> i;

int o;

while (cin >> m)

i.push_back(m);

for (unsigned n = 0; n < i.size()-1; ++n)

{

 

o = i[n] + i[n+1];

cout << o << endl;

}

 

 

return 0l;

}

(2)

int main(){

int m;

vector<int> i;

int o;

while (cin >> m)

i.push_back(m);

for (unsigned n = 0; n < i.size()/2; ++n)

{

 

o = i[n] + i[i.size()-n-1];

cout << o << endl;

}

 

 

return 0l;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值