STL里容器vector部分用法

基础用法在代码注释中说明

//test.cpp
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> v;
    vector<int> v1(10);//为向量v1赋值10个0
    vector<int> v3(10, 100);//为向量v3赋值10个100
    for(int i=1; i<8; ++i)
    {
        v.push_back(i);
        v1.push_back(i);
    }
    vector<int>::iterator it = v.begin();//迭代器,指向向量头部
    cout<<"v = ";
    while(it!=v.end())
    {
        cout<<*it<<" ";
        ++it;
    }
    cout<<endl;

    vector<int>::reverse_iterator rv_it = v1.rbegin();//反向迭代器,指向向量尾部,且自加时是向向量头部移动:
    cout<<"rv_v1 = ";
    while(rv_it != v1.rend())
    {
        cout<<*rv_it<<" ";
        ++rv_it;
    }
    cout<<endl;

    v3.insert(v3.begin()+3, 7);//在v3第三个元素前插入7
    v3.insert(v3.begin()+1, 2, 8);//在v3第二个元素前插入2个8
    vector<int>::iterator first = v.begin()+3;
    vector<int>::iterator end = v.end();
    v3.insert(v3.end(), first, end);//在v3.end()后将区间[v1.begin()+3, v1.end())元素全部插入:
    vector<int>::iterator it3 = v3.begin();
    v3.erase(v3.begin()+1);//删除v3第二个元素
    cout<<"v3 = ";
    while(it3 != v3.end())
    {
        cout<<*it3<<" ";
        ++it3;
    }
    v1.assign(first, end);//将v1清空后为v1赋值,将[first, end)区间里包含的元素赋值给v1
    v1.assign(7, 7);//将v1清空后为v1赋值7个7
    cout<<endl;
    cout<<v.at(4)<<endl;
    cout<<v[4]<<endl;
    cout<<"v.size() = "<<v.size()<<endl;//v的大小(里边有几个元素)
    cout<<"v.capacity() = "<<v.capacity()<<endl;//v的容量
    v.resize(20);//指定向量的大小为20
    cout<<"v.capacity() = "<<v.capacity()<<endl;
    return 0;
}

这里说两个点

1.向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版

vector可以为增加的元素动态的自动开辟空间,其开辟特点为以2的倍数增长,比如,新构建一个向量V1,为其尾插一个元素,打印其大小和容量为

现在增加4个元素,则容量将变为8

2.由第一个问题引出第二个问题,在使用迭代器时一定要注意向量在增长过程中是否自动扩容了,若果自动扩容,则原来的迭代器都会失效,要重新定义

自动扩容过程是:开辟一个二倍于原来向量的空间,再将原先的元素复制过来

原来的迭代器还指着原来的空间,但是向量的空间已经改变,所以原来的迭代器失效。

以上两条适用于自动扩容过程

原文地址:https://www.cnblogs.com/area-h-p/p/10737191.html

时间: 2024-11-09 00:57:44

STL里容器vector部分用法的相关文章

STL中的Vector相关用法

STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int>是一种数据类型. Vector的存储空间是连续的,list不是连续存储的. 1. 定义和初始化 vector< typeName > v1; //默认v1为空,故下面的赋值是错误的v1[0]=5;//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被

用类模板实现容器(STL里面的vector)

STL里面的很多容器,都是用类模板技术实现的.以vector为例,说明如何使用类模板技术来实现. 1 //1.myvector.h文件 2 #ifndef MYVECTOR_H 3 #define MYVECTOR_H 4 5 #include <iostream> 6 using namespace std; 7 8 template<typename T> 9 class Myvector 10 { 11 friend ostream& operator<<

用类模板实现容器存储自定义数据类型(类似于STL里面的vector)

上一节里面已经提到了,用类模板存储自定义的数据类型,如Teacher类型时,需要重载Teacher类的拷贝构造函数,"="操作符,"<<"操作符,特别要注意深拷贝和浅拷贝的问题. 例如: 1 //1.myvector.h文件 2 #ifndef MYVECTOR_H 3 #define MYVECTOR_H 4 5 #include <iostream> 6 using namespace std; 7 8 template<typen

C++中容器vector的用法

参考C++ primer. vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和 string 对象一样,标准库负责管理存储元素的相关内存.我们把 vector 称为 容器 ,是因为它可以包含其他对象.一个容器中的所有对象都必须是同一种类型的.我们将在第 9 章更详细地介绍容器. 使用 vector 之前,必须包含相应的头文件.本书给出的例子,都是假设已作了相应的 using 声明: #include <vector> using std::vector; vector

STL源代码学习--vector用法汇总

一.容器vector 使用vector你必须包含头文件<vector>: #include<vector> 型别vector是一个定义于namespace std内的template: [cpp] view plaincopyprint? template<class _Ty, class _Ax = allocator<_Ty> > 第二个參数定义内存模型. 我们一般採用默认的内存模型. 二.vector的功能 vector模塑出一个动态数组.vector

STL容器 vector,list,deque 性能比较

C++的STL模板库中提供了3种容器类:vector,list,deque对于这三种容器,在觉得好用的同时,经常会让我们困惑应该选择哪一种来实现我们的逻辑.在少量数据操作的程序中随便哪一种用起来感觉差别并不是很大,但是当数据达到一定数量后,会明显感觉性能上有很大差异. 本文就试图从介绍,以及性能比较两个方面来讨论这个问题. vector - 会自动增长的数组 list - 擅长插入删除的链表 deque - 拥有vector和list两者优点的双端队列 性能竞技场 性能总结与使用建议 测试程序清

C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法

每次忘记都去查,真难啊 1 /* 2 C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法 3 */ 4 5 /* 6 vector常用用法 7 */ 8 //头文件 9 #include<vector> 10 11 //常用的初始化方法 12 vector<int> v; //直接定义一个整型元素的向量 且未声明长度,其中int的位置可以换成别的数据类型或者结构体等 13 vector<int> v(10);

STL顺序容器【vector】【deque】【list】

我们都知道,stl容器中将容器分为两类,顺序容器和关联容器. 顺序容器有三种即vector,deque,以及list 一:顺序容器的常用操作 1:首先顺序容器的迭代器 定义:T<C>::iterator iter; /*支持所有顺序容器*/ *iter返回迭代器的引用 iter->mem 对iter解引用,等效于(*iter).men ++iter|iter++自加 --iter|iter--自减 iter1==iter2  |  iter1!=iter2比较 /*只支持vector 和

STL标准库-容器-vector

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