/*
vector顺序存储,随机访问快
list链表存储,插入删除快
deque占用内存多,兼具两者优点 注意:
1.vector严格顺序存储
2.list的迭代器只能做++或--运算,要一次移动多个位置使用advance(iterator,offset)
3.注意迭代器失效问题
4.尤其注意list的删除时接收新地址的问题
*/
#include<iostream>
#include<vector>
#include<list>
using namespace std; void DisplayVector(vector<int> &v){
cout << "capacity:" << v.capacity() << endl;//capacity 为不重新分配内存下vector能容纳的元素个数
cout << "size:" << v.size() << endl;//size是vector当前有的元素个数
cout << "elements:" << endl;
for (int i = 0; i < v.size(); i++){
cout << i<<':'<<v[i] << '\t';
}
cout << endl;
}
void DisplayList(list<int> &l){
list<int>::iterator ite = l.begin();
for (ite; ite != l.end(); ite++){
cout << distance(l.begin(),ite) << ":" << *ite << '\t';
}
cout << endl;
}
int main(){
//声明空vector
vector<int>v;
DisplayVector(v); //五个元素均为66,第二个参数不写默认是零
vector<int> v1(5,66);
DisplayVector(v1); //v2的size为5,v2被初始化为a的5个值。后一个指针要指向将被拷贝的末元素的下一位置。
int a[5] = { 0, 1, 2, 3, 3 };
vector<int> v2(a, a + 5); /*
//at()函数返回指定位置的值并可判断是否越界。在visual studio 中会引发中断异常
for (int i = 0; i < v1.size() + 1; i++){
v1.at(i) = i;
//v1[i] = i;
cout << v1.at(i) << '\t';
}
cout << endl;
*/ //push_back在vector后面插入新值,重新分配内存,pop_back删除末尾的元素
for (int i = 0; i < 10; i++){
v2.push_back(i);
}
DisplayVector(v2); //判断vector是否为空
cout << "v.empty()=" << v.empty() << endl; //迭代器访问vector
vector<int>::iterator ite = v2.begin(); for (ite; ite != v2.end(); ite++){
cout << *ite << '\t';
}
cout << endl; //利用insert向vector中插入元素
ite = find(v2.begin(), v2.end(), 5);
v2.insert(ite, 3, 666);
v2.insert(v2.begin() + 3, 2, 333);
DisplayVector(v2); //清空v2中的元素
v2.clear();
DisplayVector(v2); /*
插入位置的迭代器一般最好为: begin()或 end()返回的
STL 算法(如find函数)的返回位,find可用于查找元素,然后在这个位置插入另一个元素(这将导致查找的元素向后移).
事实是size()为0的vector插入位置如果写begin()+pos或者end()+pos,均会报越界错误。
不太懂的是既然capacity不为零,说明已经分配好了空间,为什么会有越界错误。
也许是因为vector是严格要求顺序存储。
当然要想在头尾插入最好用deque,用法和vector基本相同。
要想在数组中频繁插入删除,使用list。
*/ //初始化list
list<int>l1(10);
list<int>l2(10, 66);
DisplayList(l2); //声明迭代器
list<int>::const_iterator con_ite_list;
list<int>::iterator ite_list=l2.begin(); //插入元素,头尾插入同vector、deque,
//list的迭代器不是随机访问迭代器,是链表中的指针,只能ite++或者ite--
//要运算list的迭代器,使用advance(ite,offset),注意不要越界
advance(ite_list, 5);
l2.insert(ite_list, 555);
DisplayList(l2); //删除元素,可见插入后迭代器仍指向原来指向的元素而不是位置,而vector插入后迭代器则指向新插入的元素,也就是原来的位置
//注意警惕erase陷阱,删除后接收新的地址值。
ite_list=l2.erase(--ite_list);
DisplayList(l2); //list排序,默认升序,降序可以vector.reverse()反转
l2.insert(++l2.begin(), 555);
l2.sort();
DisplayList(l2); //二维vector,不再赘述,参考https://blog.csdn.net/a819825294/article/details/52088732
vector<vector<int>> num;
getchar();
return 0;
}

c++标准库vector&list使用练习的更多相关文章

  1. 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...

  2. c/c++ 标准库 vector

    c/c++ 标准库 vector 标准库 vector的小例子 test1~test7 #include <iostream> #include <vector> using ...

  3. C++标准库vector类型的使用和操作总结

    vector是一种类型对象的集合,它是一种顺序容器,容器中的所有对象必须都是同一种类型.想了解顺序容器的更多内容:C++顺序容器知识总结.vector的对象是可以动态生长的,这说明它在初始化时可以不用 ...

  4. C++ Primer 有感(标准库vector及迭代器)

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

  5. C++标准库vector以及迭代器

    今天看C++的书,出现了一个新的概念,容器vector以及容器迭代器. vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存. ...

  6. C++标准库vector及迭代器

    vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...

  7. C++标准库vector类型详解

    Vector简介 vector是定义在C++标准模板库,它是一个多功能.能够操作多种数据结构和算法的模板类(关于模板类我们后面会介绍,如何创建自己的模板类).vector是一个容器,能够像容器一样存放 ...

  8. C++之标准库vector

    目录 1.成员函数 2.元素访问 3.迭代器iterator 4.容量capacity 5.修改函数 std::vector是一个封装动态数组的序列容器 std::pmr::vector是一个使用多态 ...

  9. C++标准库 vector排序

    前天要做一个对C++ STL的vector容器做一个排序操作,之前一直把vector当做一个容量可自动变化的数组,是的,数组,所以打算按照对数组进行排序的方法:用快速排序或是冒泡排序等算法自己写一个排 ...

随机推荐

  1. java基础---->java调用oracle存储过程

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.今天 ...

  2. 图论之最短路径(2)——Bellman-Ford算法

    继续最短路径!说说Bellman—Ford算法 思路:假设起点为s,图中有n个顶点和m个边,那么它到任一点(比如i)的最短路径 最多可以有n-1条(没有回路就是n-1条):因为最短路径中不可能包含回路 ...

  3. 配置Python实战开发环境

    一.安装Python和easy_install 和pip 新版本的linux下面应该带有这些环境,没有自带的话可以查找google配置. 二.配置python运行的虚拟化环境: 好处:Python的库 ...

  4. WCF(五) 深入理解绑定

    适用于本机WCF-WCF交互性能最佳的绑定: 允许跨主机,但只能用于部署同一台主机上,不能访问命名管道 netNamePipeBinding总结 一 WCF与SOA SOA是一种通过为所有软件提供服务 ...

  5. mac必备软件

    LigthPaper:Markdown工具 ssh工具:ShellCraft

  6. log file sync 事件(转)

    log file sync   log file sync等待时间发生在redo log从log buffer写入到log file期间. 下面对log file sync做个详细的解释.   何时发 ...

  7. Hive sql语法详解

      Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQ ...

  8. php中的魔术方法(Magic methods)和魔术常亮

    PHP中把以两个下划线__开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __cal ...

  9. 写出gradle风格的groovy代码

    写出gradle风格的groovy代码 我们先来看一段gradle中的代码: buildscript { repositories { jcenter() } dependencies { class ...

  10. HDU_3193_Find the hotel

    Find the hotel Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...