C++STL模板库之vector

目录

  • STL之Vecter

    • 一丶STL简介
    • 二丶Vector用法
      • 1.vector容器的使用
      • 2.vector迭代器.
      • 3.vector中的方法.

STL之Vecter

一丶STL简介

STL 是标准模板库的意思. 就是数据结构,封装成类让我们使用. 使用的时候我们要了解数据结构才可以使用这些类.因为数据结构不知道是什么结构你用类的话也用不明白.

二丶Vector用法

1.vector容器的使用

首先介绍的第一个序列容器就是 vector. 它底层是数组.可以理解为是动态数组.

我们自己也可以写一个动态数组.然后 将运算符[] 进行重载.

使用之前需要包含头文件,以及使用命名空间.std. 类是在这里面定义的.

 #include<vector>
using namespace std;

因为是动态数组.所以vector容器操作的都是尾部操作.就也是数组后面进行增删改查.

2.vector迭代器.

vector的迭代器有两种.

vector<object>::const_iterator  const_iterator迭代器是不能修改内容的
vector<object>::iterator   iterator定义的迭代器是可读可写的.

编写代码如下:

栈代码:

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main(char *argc,char *argv[])
{

    vector<int> a;
    a.push_back(1);
    a.push_back(2);

    vector<int>::const_iterator it = a.begin();
    while (it != a.end())
    {
        cout << *it << endl;
        ++it;
    }
    system("pause");

}

方法:

push_back(Value); 是往数组后面添加值.

begin(); 获取第一个元素

end(); 获取最后一个元素.

*it 获取值.

上面的代码使我们存放的int类型数据. 其实vector可以当做数组来用.是变长的数组.

跨平台的. 我们不光可以存储int 也可以存储 基本类型.以及指针类型都是可以的.或者存储

函数指针也可以.

例如下:

typedef int(*pFn)(int , int );
int Add(int a, int b)
{
    return a + b;
}
int main(char *argc,char *argv[])
{
    pFn p = Add;
    vector<pFn> pfnve;
    pfnve.push_back(p);
    vector<pFn>::iterator it = pfnve.begin();
    while (it != pfnve.end())
    {
        cout << (*it)(1, 2) << endl; //第一种输出方式
        cout << it[0](1, 4) << endl; //使用[]操作符输出
        it++;
    }
    system("pause");

}

结果第一个会输出3,第二个会输出五,因为我们存储了一个函数指针.如果存储多个.则可以进行多次调用.

堆代码:

上面使用的 vector是在栈中定义的,我们也可以定义为指针.也就是在堆中使用.

代码如下:

int main(char *argc,char *argv[])
{
    vector<int> *a = new vector<int>;
    a->push_back(1);
    a->push_back(2);
    a->push_back(4);
    a->push_back(3);
    a->push_back(5);

    vector<int>::const_iterator it = a->cbegin();
    while (it != a->cend())
    {
        cout << (*it) << endl;
        cout << it[0] << endl;
        it++;
    }
    cout << "---------------------------" << endl;

    system("pause");

}

cbegin(); 也是返回第一个元素,前提是你使用const_iterator 迭代器才可以. cbegin()c开头就是const的意思.常量的意思.也就是说不能更改.

3.vector中的方法.

push_back(Value); 往vector容器后面添加一个数据.

begin(); 获取第一个元素.

end(); 获取最后一个元素.

size(); 容器中元素的个数,可以通过 for(i < xx.size());的方式遍历

clear(); 清空容器中的所有元素

front(); 返回容器中第一个元素的值,跟begin()不同,它是返回值

back(); 返回容器中最后一个元素的值

pop_back(); 返回容器中最后一个元素的值,并且清空最后一个元素.

erase(); 删除容器中任意一个位置的元素.

原文地址:https://www.cnblogs.com/iBinary/p/9885692.html

时间: 2024-10-10 02:21:28

C++STL模板库之vector的相关文章

C++ 泛型程序设计与STL模板库(1)---泛型程序设计简介及STL简介与结构

泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 术语:概念 用来界定具备一定功能的数据类型.例如: 将"可以比大小的所有数据类型(有比较运算符)"这一概念记为Comparable 将"具有公有的复制构造函数并可以用'='赋值的数据类型"这一概念记为Assignable 将"可以比大小.具有公有的复制构造函数并可以用'='赋值的所有数据类型"这个概念记

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

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

STL标准库-容器-vector

摘要: 技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性. 我对向量容器vector的理解就是一个动态数组,内存连续,它是动态分配内存,且每次扩张的原来的二倍. 他的结构如下 一 定义 vector< 类型 > 标识符(最大容量,初始所有值) vector是一种类模板,那么他有很多行为与类相似 头文件 #include <vector> //a.定义 vector<typeName> v; vector<int> v; //b.拷贝构造

C++之路起航——标准模板库(vector)

vector(动态数组或向量):动态分配内存空间的线性储存结构. 需要包括头文件<vector> 定义: vector<数据类型> 变量名: Eg: vector<int> s; //定义了一个数据类型为整形的动态数组; 基本操作(红色标识为常用操作): s[i]直接以下标方式访问容器中的元素.       s.front()  返回首元素. s.back()  返回尾元素.   s.push_back(x)向表尾插入元素x. s.size()  返回表长.  s.em

C++入门学习——标准模板库之vector

vector(向量容器),是 C++ 中十分有用一个容器.vector 之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector 是一个能够存放任意类型(类型可以是int, double, string, 还可以是类)的动态数组,能够增加和压缩数据. 使用 vector 之前,必须包含相应的头文件,vector 属于 std 命名域的,因此需要通过命名限定: #include <vector> using std::vector; //using namespa

C++ STL模板库

list vector  set map区别 本质解释: 对比: 1)vector与数组 数组声明时要指定大小.vector可变. 两者内存都是连续的. 2)vector与list vector是连续的内存,list是双向连接表,在内存中不一定连续. 当数值内存不够时,vector会重新申请一块足够大的连续内存,把原来的数据拷贝到新的内存里面:list因为不用考虑内存的连续,因此新增开销比vector小. list只能通过指针访问元素,随机访问元素的效率特别低,在需要频繁随机存取元素时,使用ve

C++STL模板库关联容器之set/multiset

目录 一丶关联容器简介.set/multiset 二丶演示代码. 一丶关联容器简介.set/multiset 我们的序列容器,底层都是线性表构成的. 比如 vector list deque. 关联容器底层就是红黑树. 以set集合为例. set内部元素根据其值自动排序.每个元素的值只允许出现一次.不能重复. multiset 跟set一样.只不过值可以重复. 二丶演示代码. #include <set> using namespace std; int main(char *argc, ch

C++STL模板库序列容器之deque

目录 一丶队列容器deque简介 二丶使用代码演示 一丶队列容器deque简介 deque底层跟vector一样,都是数组维护.不同的是可以操作头部. 二丶使用代码演示 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> #include <algorithm> #include <iostream> #include &

C++标准模板库之vector

vector(向量容器),是 C++ 中十分有用一个容器.它能够像容器一样存放各种类型的对象,vector 是一个能够存放任意类型(类型可以是int, double, string, 还可以是类)的动态数组,能够增加和压缩数据. 使用 vector 之前,必须包含相应的头文件,vector 属于 std 命名域的,因此需要通过命名限定: #include <vector> using std::vector; //using namespace std; vector 对象的定义和初始化 ve