C++ vector总结

简介: C++ vector总结

目录


介绍


常用函数


函数实例


1、初始化vector


2、遍历


3、修改元素的值


4、删除元素


5、排序


介绍

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。


在 vector 容器中,根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多数情况下也是常数,总体来说速度很快。


在中间插入或删除元素时,因为要移动多个元素,因此速度较慢,平均花费的时间和容器中的元素个数成正比。


常用函数

成员函数


作 用


vector()


无参构造函数,将容器初始化为空


vector(int n)


将容器初始化为有 n 个元素


vector(int n, const T & val)


假定元素的类型是 T,此构造函数将容器初始化为有 n 个元素,每 个元素的值都是 val


vector(iterator first, iterator last)


first 和 last 可以是其他容器的迭代器。一般来说,本构造函数初始化的结果就是将 vector 容器的内容变成与其他容器上的区间 [first, last) —致


void assign(int n,const T& x)


设置向量中第n个元素的值为x


void clear()


删除所有元素


bool empty()


判断容器是否为空


void pop_back()


删除容器末尾的元素


void push_back( const T & val)


将 val 添加到容器末尾


int size()


返回容器中元素的个数


Int capacity()


当前vector分配的大小


reference at(int pos)


返回pos位置元素的引用


T & front()


返回容器中第一个元素的引用


T & back()


返回容器中最后一个元素的引用


iterator begin()


返回向量头指针,指向第一个元素


iterator end()


返回向量尾指针,指向向量最后一个元素的下一个位置


reverse_iterator rbegin()


反向迭代器,指向最后一个元素


reverse_iterator rend()


反向迭代器,指向第一个元素之前的位置


iterator insert(iterator i, const T & val)


将 val 插入迭代器 i 指向的位置,返回 i


iterator insert( iterator i, iterator first, iterator last)


将其他容器上的区间 [first, last) 中的元素插入迭代器 i 指向的位置


iterator erase(iterator i)


删除迭代器 i 指向的元素,返回值是被删元素后面的元素的迭代器


iterator erase(iterator first, iterator last)


删除容器中的区间 [first, last)


void swap( vector <T> & v)


将容器自身的内容和另一个同类型的容器 v 互换


函数实例

1、初始化vector

   (1) vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。


  (2)vector<int> a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1


  (3)vector<int> a(b); //用b向量来创建a向量,整体复制性赋值


  (4)vector<int> a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素


  (5)int b[7]={1,2,3,4,5,9,8};


       vector<int> a(b,b+7); //从数组中获得初值


2、遍历

#include <string>


#include <cctype>


using namespace std;


int main() {


   vector<int> myVector(10, 22);


   //通过下角标遍历。


   for (auto i = 0; i < myVector.size(); i++)


   {


       cout << " " << myVector[i];


   }


   cout << "\n";


   myVector.push_back(44);


   //通过迭代器遍历


   for (auto i = myVector.begin(); i != myVector.end(); i++)


   {


       cout << " " << *i;


   }


   cout << "\n";


   return 0;


}


3、修改元素的值

// list::sort


#include <iostream>


#include <vector>


#include <string>


#include <cctype>


using namespace std;


int main() {


   vector<int> myVector(10, 22);


   //通过下角标遍历。


   for (auto i = 0; i < myVector.size(); i++)


   {


        myVector[i]=55;


   }


   cout << "\n";


   //通过下角标遍历。


   for (auto i = 0; i < myVector.size(); i++)


   {


       cout << " " << myVector[i];


   }


   cout << "\n";


   myVector.push_back(44);


   //通过迭代器遍历修改元素的值。


   for (auto i = myVector.begin(); i != myVector.end(); i++)


   {


       if (*i == 55)


       {


           *i = 33;


       }


   }


   cout << "\n";


   for (auto i = myVector.begin(); i != myVector.end(); i++)


   {


       cout << " " << *i;


   }


   return 0;


}


4、删除元素

#include <iostream>


#include <vector>


#include <string>


#include <cctype>


using namespace std;




int main() {


   vector<int> myVector = {1,2,3,4,5,6,7,8,9,11};


   //通过下角标删除。


   for (auto i = 0; i < myVector.size(); i++)


   {


       if (i == 4)


       {


           myVector.erase(myVector.begin()+4);


       }


   }


   cout << "\n";


   //通过迭代器遍历删除。


   for (auto i = myVector.begin(); i != myVector.end();)


   {


       if (*i == 7)


       {


           i=myVector.erase(i);


       }


       else


       {


           i++;


       }


   }


   cout << "\n";


   for (auto i = myVector.begin(); i != myVector.end();i++)


   {


       cout << " " << *i;


   }


   cout << "\n";


   return 0;


}


5、排序

// list::sort


#include <iostream>


#include <vector>


#include <algorithm>


using namespace std;


bool compar(int a, int b)


{


   return a > b;


}


int main() {


   vector<int> myVector = { 1,2,4,3,5,6,7,8,9,11 };


   sort(myVector.begin(), myVector.end());


   for (auto i = myVector.begin(); i != myVector.end(); i++)


   {


       cout << " " << *i;


   }


   cout << "\n";


   sort(myVector.begin(), myVector.end(),compar);


   for (auto i = myVector.begin(); i != myVector.end(); i++)


   {


       cout << " " << *i;


   }


   cout << "\n";


   return 0;


}


目录
相关文章
|
4月前
|
存储 编译器 C++
【C++】vector介绍+模拟实现
【C++】vector介绍+模拟实现
|
18天前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
45 4
|
4天前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
14 0
|
2月前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
25 1
|
2月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
70 6
|
2月前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
75 7
|
2月前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
2月前
|
编译器 C语言 C++
【C++篇】解密 STL 动态之魂:全面掌握 C++ vector 的高效与优雅
【C++篇】解密 STL 动态之魂:全面掌握 C++ vector 的高效与优雅
53 3
|
2月前
|
C++
【C++】C++ STL探索:Vector使用与背后底层逻辑(三)
【C++】C++ STL探索:Vector使用与背后底层逻辑
|
2月前
|
编译器 Linux C++
【C++】C++ STL探索:Vector使用与背后底层逻辑(二)
【C++】C++ STL探索:Vector使用与背后底层逻辑