标准模板库使用参考——vector向量容器

  C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。

  在C++标准库中,STL被组织成为下面的13个头文件:<algorithm>, <deque>, <functional>, <iterator>, <vector>, <list>, <map>, <memory>, <numeric>, <queue>, <set>, <stack>和 <utility>

1,vector向量容器

  vector是一种简单高效的容器,在尾端插入何删除元素,算法时间复杂度为O(1),其他元素插入和删除为O(n)。vector可动态调整所占用的内存空间。

用数组方式访问vector元素的参考代码如下图所示:

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;

int main()
{
    vector<int> v;
    v.push_back(20);    //尾端插入新元素
    v.push_back(26);
    v.push_back(12);

    for(int i = 0; i < v.size(); i++)
        cout<<v[i]<<‘ ‘;

    getchar();

    return 0;
}

运行结果

#include<iostream>
#include<cstdio>
#include<vector>

using namespace std;

int main()
{
    int j;

    vector<int> v;

    v.push_back(0);                          //尾端插入新元素
    v.push_back(1);
    //v.clear();                             //全部清空元素
    v.push_back(2);
    v.insert(v.begin()+2, 9);                //插入9在第二个后面
    v.insert(v.begin(), 5);                  //插入5为首元素
    v.insert(v.end(), 12);                   //插入12为末元素
    v.erase(v.begin()+1);                    //删除第二个元素
    v.erase(v.begin(), v.begin()+2);         //删除前三个元素

    vector<int>::iterator i;                 //迭代器相当于游标

    for(i = v.begin(), j = 0; i != v.end(); i++, j++)
        cout<<"v["<<j<<"]="<<*i<<endl;

    swap(v[1], v[2]);

    for(i = v.begin(), j = 0; i != v.end(); i++, j++)
        cout<<"v["<<j<<"]="<<*i<<endl;

    cout<<v.empty()<<endl;                 //判断是否为空
    cout<<v.size()<<endl;                  //元素实际个数
    cout<<v.max_size()<<endl;              //可容纳的最大元素个数
    cout<<v.capacity()<<endl;              //当前可容纳的vector元素个数
    cout<<v.front()<<endl;                 //首元素引用
    cout<<v.back()<<endl;                  //末尾元素引用
    v.pop_back();                           //删除末尾元素

    v.reserve(30);                          //调整数据空间大小
    cout<<v.capacity()<<endl;

    vector<int>::reverse_iterator ri;       //反响迭代器
    for(ri = v.rbegin(); ri != v.rend(); ri++)      //首尾反向
        cout<<*ri<<" ";

    getchar();

    return 0;
}

运行结果

结构体容器参考代码如下

#include<iostream>
#include<cstdio>
#include<vector>

using namespace std;

struct stu
{
    int x;
    int y;
};

int main()
{
    int j;
    vector<stu> v1;     //结构体容器
    vector<stu> v2;

    struct stu a = {1, 2};
    struct stu b = {2, 3};
    struct stu c = {4, 5};

    v1.push_back(a);
    v1.push_back(b);
    v1.push_back(c);
    v2.push_back(c);
    v2.push_back(b);
    v2.push_back(a);

    cout<<"v1:\n";

    for( int i = 0; i < v1.size(); i++)
        cout<<v1[i].x<<" "<<v1[i].y<<endl;

    cout<<"v2:\n";

    for(int i = 0; i < v2.size(); i++)
        cout<<v2[i].x<<" "<<v2[i].y<<endl;

    swap(v1, v2);

    cout<<"v1:\n";

    for(int i = 0; i <v1.size(); i++)
        cout<<v1[i].x<<" "<<v1[i].y<<endl;

    cout<<"v2:\n";

    for(int i = 0; i < v2.size(); i++)
        cout<<v2[i].x<<" "<<v2[i].y<<endl;

    getchar();

    return 0;
}

运行结果:

原文地址:https://www.cnblogs.com/ruruozhenhao/p/8214636.html

时间: 2024-11-08 23:51:33

标准模板库使用参考——vector向量容器的相关文章

C++ Primer 学习笔记_11_标准模板库_stack、queue队列容器与priority_queue优先队列容器

C++ Primer 学习笔记_11_标准模板库_stack.queue队列容器与priority_queue优先队列容器 1.stack堆栈 stack堆栈是一个后进先出(Last In First Out,LIFO)的线性表,插入和删除元素都只能在表的一端进行.插入元素的一端称为栈顶,而另一端称为栈底.插入元素叫入栈(Push),删除元素叫出栈(Pop).下图是堆栈示意图 堆栈只提供入栈,出栈,栈顶元素访问和判断是否为空等几种方法.采用push()方法将元素入栈:采用pop()方法出栈:采用

C++标准模板库STL算法与自适应容器(栈和队列)

参考<21天学通C++>第23与第24章节,对STL算法与自适应容器进行介绍. 实际上在前面的STL顺序容器.关联容器进行介绍时或多或少引用到了一些STL算法中的模板函数.而自适应容器是在顺序容器的基础上按照stack.queue的性质进行定制实现的.所以,本篇博文将言简意赅地总结出需要掌握的纲要. 一.STL算法 查找.搜索.删除.计数.排序等都是一些通用算法,STL通过模板函数提供了这些算法,可通过迭代器对容器进行操作.需要包含<algorithm>头文件. 1. find,f

CPP strings 与标准模板库

Leetcode 838 push dominos 解体思路 code { font-family: courier; color: green } STL标准模板库 提供了一组表示容器.迭代器.函数对象和算法的模板. Alex Stepanov & Meng Lee 一起开发了STL, 1994年第一版发布.STL不是面向对象的编程,而是一种不同的编程模式---泛型编程(generic programming). 前者关注的是编程的数据方面,后者关注的是算法.共同特点是抽象与创建可重用代码,但

C++ Primer 学习笔记_23_标准模板库_stack.

C++ Primer 学习笔记_11_标准模板库_stack.queue队列容器与priority_queue优先队列容器 1.stack堆栈 stack堆栈是一个后进先出(Last In First Out,LIFO)的线性表,插入和删除元素都只能在表的一端进行.插入元素的一端称为栈顶,而另一端称为栈底.插入元素叫入栈(Push),删除元素叫出栈(Pop).下图是堆栈示意图 堆栈只提供入栈,出栈,栈顶元素访问和判断是否为空等几种方法.采用push()方法将元素入栈:采用pop()方法出栈:采用

标准模板库(STL)学习探究之vector容器

标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类

C++ Primer(第五版)学习笔记_2_标准模板库vector(1)

C++ Primer(第五版)学习笔记_2_标准模板库vector(1) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 向量容器vector不但能像数组一样进行随机访问,还能在尾部插入元素,完全可以替代数组. 值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可以动态调整所占的内存空间. 容器vector的下标是从0开始的,如果vector容器的大小是n,则元素下标为0~n-1,这和数组的一样的.不一样的是,vector可以随时调整其大小. vector重要的方法有三个

C++标准模板库之vector(Boolan)

vector是C++标准模板库中一种常见的容器,像数组类似,vector使用连续的存储空间用来保存元素,使用指针偏移可以快速的访问元素(通常认为是O1复杂度),与数组不同的是它的大小是可变的,在vector内部使用动态分配的内存保存元素,这意味着vector增长时需要重新分配内存,并将原来的原来的数据复制到该内存单元,需要很大的开销,因此vector并不会在每次新增元素时候都重新分配内存空间.vector实际容量(capacity)通常比实际大小(size)大得多.参考数据结构(C++语言版),

C++ Primer 学习笔记_13_标准模板库_list双向链表容器

C++ Primer 学习笔记_13_标准模板库_list双向链表容器 list容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表,这样,对链表的任一位置的元素进行插入.删除和查找都是超快速的.下图是双向循环链表的结构示意图. list的每个节点有三个域:前驱元素指针域.数据域和后继元素指针域.前驱元素指针域保存了前驱元素的首地址:数据域则是本节点的数据:后继元素指针域则保存了后继元素的首地址.list的头结点的前驱元素指针域保存的是链表中尾元素的首地址,而list的尾

C++ Primer(第五版)学习笔记_3_标准模板库vector(2)

C++ Primer(第五版)学习笔记_3_标准模板库vector(2) 欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢 6.元素的插入 insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置. 要注意的是,insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标. #include <iostream> #include <vector> using namespa