- 外文名
- vector
- 头文件
- #include
- 命名空间
- using namespace std
- 属 性
- 类库
- 运用软件
- JAVA、C++
-
C++_vector操作
2019-05-28 11:24:15vector说明: vector是向量类型,可以容纳许多类型的数据,因此也被称为容器 (可以理解为动态数组,是封装好了的类) vector头文件-vector vector初始化: 方式1. vector<int>a(10);//定义具有10个...文章目录
1. vector:
1.1 vector 说明
- vector是向量类型,可以容纳许多类型的数据,因此也被称为容器
- (可以理解为动态数组,是封装好了的类)
- 进行
vector
操作前应添加头文件#include <vector>
1.2 vector初始化:
方式1.
//定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定 vector<int>a(10);
方式2.
//定义具有10个整型元素的向量,且给出的每个元素初值为1 vector<int>a(10,1);
方式3.
//用向量b给向量a赋值,a的值完全等价于b的值 vector<int>a(b);
方式4.
//将向量b中从0-2(共三个)的元素赋值给a,a的类型为int型 vector<int>a(b.begin(),b.begin+3);
方式5.
//从数组中获得初值 int b[7]={1,2,3,4,5,6,7}; vector<int> a(b,b+7);
1.3 vector对象的常用内置函数使用(举例说明)
#include<vector> vector<int> a,b; //b为向量,将b的0-2个元素赋值给向量a a.assign(b.begin(),b.begin()+3); //a含有4个值为2的元素 a.assign(4,2); //返回a的最后一个元素 a.back(); //返回a的第一个元素 a.front(); //返回a的第i元素,当且仅当a存在 a[i]; //清空a中的元素 a.clear(); //判断a是否为空,空则返回true,非空则返回false a.empty(); //删除a向量的最后一个元素 a.pop_back(); //删除a中第一个(从第0个算起)到第二个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)结束 a.erase(a.begin()+1,a.begin()+3); //在a的最后一个向量后插入一个元素,其值为5 a.push_back(5); //在a的第一个元素(从第0个算起)位置插入数值5, a.insert(a.begin()+1,5); //在a的第一个元素(从第0个算起)位置插入3个数,其值都为5 a.insert(a.begin()+1,3,5); //b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6) a.insert(a.begin()+1,b+3,b+6); //返回a中元素的个数 a.size(); //返回a在内存中总共可以容纳的元素个数 a.capacity(); //将a的现有元素个数调整至10个,多则删,少则补,其值随机 a.resize(10); //将a的现有元素个数调整至10个,多则删,少则补,其值为2 a.resize(10,2); //将a的容量扩充至100, a.reserve(100); //b为向量,将a中的元素和b中的元素整体交换 a.swap(b); //b为向量,向量的比较操作还有 != >= > <= < a==b;
2. 顺序访问vector的几种方式,举例说明
2.1. 对向量a添加元素的几种方式
1.向向量a中添加元素
vector<int>a; for(int i=0;i<10;++i){a.push_back(i);}
2.从数组中选择元素向向量中添加
int a[6]={1,2,3,4,5,6}; vector<int> b; for(int i=0;i<=4;++i){b.push_back(a[i]);}
3.从现有向量中选择元素向向量中添加
int a[6]={1,2,3,4,5,6}; vector<int>b; vector<int>c(a,a+4); for(vector<int>::iterator it=c.begin();it<c.end();++it) { b.push_back(*it); }
4.从文件中读取元素向向量中添加
ifstream in("data.txt"); vector<int>a; for(int i;in>>i){a.push_back(i);}
5.常见错误赋值方式
vector<int>a; for(int i=0;i<10;++i){a[i]=i;}//下标只能用来获取已经存在的元素
2.2 从向量中读取元素
1.通过下标方式获取
int a[6]={1,2,3,4,5,6}; vector<int>b(a,a+4); for(int i=0;i<=b.size()-1;++i){cout<<b[i]<<endl;}
2.通过迭代器方式读取
int a[6]={1,2,3,4,5,6}; vector<int>b(a,a+4); for(vector<int>::iterator it=b.begin();it!=b.end();it++){cout<<*it<<" ";}
3.几个常用的算法
#include<algorithm> //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列 sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,1 reverse(a.begin(),a.end()); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素 copy(a.begin(),a.end(),b.begin()+1); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置 find(a.begin(),a.end(),10);
4. 写在最后
本人已经毕业半年有余,深刻感受到生活不易,之前更新博客的时候从没想到自己的博客会有这么多人喜欢,在这里感谢各位朋友的信任,同时也祝福各位同学前程似锦,学业进步!
同时,在这里出售全套的文字学习资料:
具体包括《C primer plus》原文、练习及源代码;C语言具体各部分详解书籍;
《C++ primer plus》原文、练习及源代码;各种C++相关书籍;
《数据结构 C++ 语言描述》《数据结构 C 语言描述》《数据结构》严蔚敏版;数据结构相关书籍;
《powershell 入门教程》;《剑指offer 第二版》原文及源代码;《深入了解计算机系统》中文版,布莱恩特著,等等书籍;
全套资料售价¥68.8,单套¥19.9
-
vector
2019-08-18 23:10:38vector的插入及基本要素 #include <stdio.h> #include <iostream>//cin>> cout<< 必备 #include <vector>//vector 必备 using namespace std; int main() { int a[1000]; ...vector 的插入及基本要素
#include <stdio.h> #include <iostream>//cin>> cout<< 必备 #include <vector>//vector 必备 using namespace std; int main() { int a[1000]; vector<int> v;//定义一个容器数组 vector<int> ::iterator it;//定义一个vector(容器数组)类型的迭代器指针,此指针具有指向vector容器数组的作用 for(int i=0;i<10;i++) { cin>>a[i];//输入a[i] v.push_back(a[i]);//把a[i]输入v容器数组里 } for(it=v.begin();it!=v.end();it++)//v.begin()是vector容器数组的初始下标;v.end()是vector容器数组的终止元素的下一位,为空;it指针从初始开始指向..... { if(*it==0)//当it指向0时; { v.insert(it,3);//把3插入it(0)前 //也可写成 v.insert(v.begin()+i,a) 或者 v.insert(v.end()+i,a) 把a插到v.begin()+i前面 it++;//it要++,否则陷入死循环,因为*it==0下标始终右移一位; } } for(it=v.begin();it!=v.end();it++) { cout<<*it<<"\n";//逐个输出*it(vector容器数组的元素); } return 0; }
2 (区间)删除
#include <stdio.h> #include <iostream> #include <vector> using namespace std; int main() { int a[1000]; vector<int> v; vector<int> ::iterator it; for(int i=0;i<10;i++) { v.push_back(i); } v.erase(v.begin(),v.end()-1);//区间删除 for(it=v.begin();it!=v.end();it++) { cout<<*it<<"\n"; } return 0; }
3 字符数组
#include <stdio.h> #include <iostream> #include <vector> using namespace std; int main() { char a[1000]; vector<char> v; vector<char> ::iterator it; for(int i=0;i<5;i++) { cin>>a[i]; v.push_back(a[i]); } v.erase(v.begin()+1,v.begin()+3); v.insert(v.begin()+1,'0'); for(it=v.begin();it!=v.end();it++) { cout<<*it<<"\n"; } return 0; }
-
Vector
2018-03-17 14:08:58Vector Vector非常类似ArrayList,都继承自AbstractList并且都实现了List接口,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator...Vector
Vector非常类似ArrayList,都继承自AbstractList并且都实现了List接口,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
Vector实现List接口,所以里面的元素是有序的。
向Vector中加入的元素add()方法是有序的,后加入的排列在最后。
我们也可以调用add(int index,E element)方法向指定位置加入元素。
vector.elements()方法返回一个枚举类型,我们可以用来遍历整个vector。
vector.iterator()方法返回一个迭代器,同样可以用来遍历整个vector
vector.contains(E element)方法,如果vector中存在指定元素则返回true,否则false。
vector.get(int index)方法,返回指定位置的元素,如果超过vector的capacity则报错。
初始化vector时,默认不带参数的话,vector的初始capacity大小为10。当当前空间不足以加入新元素时,capacity会加倍,即从10变成20,40,80......
当然我们也可以使用下面两种带参数的构造
1.Vector vector=new Vector(int capacity);指定初始化大小,不允许负数大小的初始化。如果初始化大小为0,则加入数据时大小变为1,然后每次扩充遵循加倍原则。
2.Vector vector=new Vector(int capacity,int increasesize)指定初始化大小,并且以后每次容量不足时,大小每次增加increasesize。
import java.util.Enumeration; import java.util.Iterator; import java.util.Vector; public class Test { public static void main(String[] args){ Vector vector=new Vector(0); System.out.println("vector的初始大小: "+vector.capacity()); vector.add("大家好"); //Appends the specified element to the end of this Vector. vector.add("111"); //add方法将新元素加到末尾 vector.add("222"); vector.add("你好"); //elements()返回这个向量内所有元素的枚举 Enumeration e=vector.elements();//Returns an enumeration of the components of this vector. System.out.println(vector.capacity()); while(e.hasMoreElements()){ System.out.println(e.nextElement()); } System.out.println("---------分界线----------------------"); vector.add(2,"我在第三位"); //add(int index,E element)将新元素加入到指定位置 Iterator iterator=vector.iterator(); //使用迭代器 while(iterator.hasNext()){ System.out.println(iterator.next()); } for(int i=0;i<100;i++) { vector.add(i); System.out.print(vector.capacity()+" "); if(i%10==0) System.out.println(); } System.out.println(vector.capacity()); System.out.println(vector.contains("你好")); System.out.println(vector.get(2)); } }
运行结果:
vector的初始大小: 10 10 大家好 111 222 你好 ---------分界线---------------------- 大家好 111 我在第三位 222 你好 10 10 10 10 10 20 20 20 20 20 20 20 20 20 20 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 160 true 我在第三位
初始化大小为0
vector的初始大小: 0 capacity:1 capacity:2 capacity:4 capacity:4 大家好 111 222 你好 8 8 8 8 16 16 16 16 16 16 16 16 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 true 222
-
C++ 如何快速清空vector以及释放vector内存?
2017-11-10 15:19:411、为什么需要主动释放vector内存 vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当...1、为什么需要主动释放vector内存
vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时,其实际分配的容量要比当前所需的空间多一些。就是说,vector容器预留了一些额外的存储区,用于存放新添加的元素,这样就不必为每个新元素重新分配整个容器的内存空间。
在调用push_back时,每次执行push_back操作,相当于底层的数组实现要重新分配大小;这种实现体现到vector实现就是每当push_back一个元素,都要重新分配一个大一个元素的存储,然后将原来的元素拷贝到新的存储,之后在拷贝push_back的元素,最后要析构原有的vector并释放原有的内存。
2、怎么释放vector的内存A、对于数据量不大的vector,没有必要自己主动释放vector,一切都交给操作系统。
B、但是对于大量数据的vector,在vector里面的数据被删除后,主动去释放vector的内存就变得很有必要了!
由于vector的内存占用空间只增不减,比如你首先分配了10000个字节,然后erase掉后面9999个,留下一个有效元素,但是内存占用仍为10000个。所有内存空间是在vector析构时候才能被系统回收。empty()用来检测容器是否为空的,clear()可以清空所有元素。但是即使clear(),vector所占用的内存空间依然如故,无法保证内存的回收。如果需要空间动态缩小,可以考虑使用deque。如果vector,可以用swap()来帮助你释放内存。
3、示例代码
新建一个控制台程序,把代码运行起来看输出,且看代码:
#include <iostream> #include <vector> #include <string> #include <Windows.h> #include <Psapi.h> #pragma comment(lib, "Psapi.lib") using namespace std; //GetCurPorcessMemory bool GetCurProcessMemory(HANDLE handle, std::wstring& workingSize, std::wstring& peakWorkingSize) { //HANDLE handle = GetCurrentProcess(); PROCESS_MEMORY_COUNTERS pmc; if (GetProcessMemoryInfo(handle, &pmc, sizeof(pmc))) { int size = pmc.WorkingSetSize/1024; wchar_t buf[10] = {0}; _ltow(size, buf, 10); workingSize = std::wstring(buf); size = pmc.PeakWorkingSetSize/1024; _ltow(size, buf, 10); peakWorkingSize = std::wstring(buf); return true; } return false; } int _tmain(int argc, _TCHAR* argv[]) { std::wstring wszWorking, wszPeakWorking; vector<string> ary; for (int i=0; i<1000000; i++) { ary.push_back("hello vector"); } wchar_t wch; wcin >> wch; GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 此时检查内存情况 wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl; wcin >> wch; // ary.clear(); wcout << "vector clear" << endl; wcout << "vector capacity " << ary.capacity() << endl; GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 此时再次检查 wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl; wcin >> wch; //vector<string>(ary).swap(ary); ary.swap(vector<string>(ary)); wcout << "vector swap" << endl; wcout << "vector capacity " << ary.capacity() << endl;// 此时容量为0 GetCurProcessMemory(GetCurrentProcess(), wszWorking, wszPeakWorking);// 检查内存 wcout << "Working : " << wszWorking.c_str() << " PeakWorking : " << wszPeakWorking.c_str() << endl; wcout << "vector size : " << ary.size() << endl;//0 //getchar(); system("pause"); return 0; }
-
C++ vector的用法(整理)
2018-08-31 14:36:03C++ vector的用法(整理) vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件: #include<vector>; 一、... -
C++(笔记)容器(vector)作为函数参数如何传参
2017-05-17 17:51:54void 函数名( vector< int> obj ); void 函数名( vector* pobj ); void 函数名( const vector* pobj ); // 在函数内不能改变 pobj 指向的对象 ,//调用时不会调用拷贝构造函数 void 函数名( vector< int>& obj ... -
C++ 中vector的使用方法
2016-02-01 10:21:20C++ 中vector的使用方法(纯干货!) -
vector赋值问题,vector存放vector
2017-01-06 05:49:09定义一个info类,n为一个输入的值 vector<vector<info>> v: v.assign(n,vector(n,ifo)): 怎么呢会出错呢 -
vector insert用法 C++
2017-08-29 13:02:10#include #include using namespace std; int main() ... vector v(3); v[0]=2; //v[0]是第0个元素 v[1]=7; v[2]=9; v.insert(v.begin(),8);//在最前面插入新元素。 v.insert(v.begin()+ -
C++vector的使用总结及常用vector操作
2017-02-26 21:11:48C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件: #include C++ vector类有两种使用方式: 第一种:STL方式 vector text; 1. 我们向 ... -
vector 的六种 创建和初始化方法
2018-05-22 08:26:39(1): vector<int> ilist1; 默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacity 也返回 0,意味着还没有分配内存空间。这种初始化方式适用于元素个数未知,需要在程序中动态添加的... -
C++ Vector 使用说明
2018-12-20 16:53:09向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的... -
vector vector int 初始化
2019-04-20 16:04:31方法一: vector<vector>array=(2,vector()); array[0].push_back(1); array[i].push_back(2); 方法二: vector<vector >array={{1,2},{3,4}}; -
C++ vector的用法
2019-06-19 16:57:48vector 是C++ STL的一个重要成员,使用它时需要包含头文件: #include<vector>; 一、vector 的初始化:可以有五种方式,举例说明如下: (1) vector<int> a(10); //定义了10个整型元素的向量(尖... -
OpenCV轮廓vectorvector,vector,vector,vector<RotatedRect>
2018-06-06 14:15:46vector<vector<Point>>,vector<V e c 4 i>,vector<R e c t>,vector<R o t a t e d R e c t> 刚开始学OpenCV没多久遇到这些个东西不知道是什么,搞得很不舒服。 通过给轮廓绘制... -
关于vector大小(size)和容量(capacity)总结
2016-04-08 22:37:03主要介绍了vector 容器大小相关的操作函数(size、max_szie、capacity),同时介绍了容器大小超出容器capacity能力会内存重新分配以及iterator失效简单分析。同时给出了避免内存重新分配的两种方法。 -
Vector 嵌套 Vector
2013-11-11 21:46:37#include #include using namespace std; int main() { ... int a[]={1,2,3,4,5,6,7,8,9,10... vector temp1(a,a+5),temp2(a+5,a+10); //创建两个vector对象,使用内容方式 vector > vec; vec.push_back(temp -
C++语言之vector用法
2019-03-16 09:47:18标准库vector类型是C++中使用较多的一种类模板,vector类型相当于一种动态的容器,在vector中主要有一些基本的操作,接下来分别从以下的几个方面总结: vector对象的定义和初始化 vector对象的基本操作,主要包括... -
Vector 把一个vector追加到另一个vector
2018-09-15 09:00:18把一个vector里的元素追加放入另外一个vector std::vector<int> src; std::vector<int> dest; dest.insert(dest.end(), src.begin(), src.end()); 插到其他位置同理,只需要改变第一... -
vector vector int的使用
2018-10-23 20:49:47#include&...vector> using namespace std; int main() { vector<vector<int>> test; vector<int> v; int n, temp; cin &... -
opencv中vector_ vector _Point_,vector_vec4i_,vector_Rect_,vector_RotatedRect_含义
2019-05-04 09:08:57vector<vector<Point>>://一般在轮廓查找和轮廓绘制使用,参数 contours vector容器里面放了一个vector容器,子容器里放点 vector<V e c 4 i>:放了4维int向量//一般在轮廓查找和轮廓绘制... -
Vector的详细用法
2019-10-09 08:18:16vector 是向量类型 它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件:#include; 一、vector 的初始化: (1) vector<int> a(10); //定义... -
vector用法
2019-06-06 14:42:191.vector是表示可变大小数组的序列容器。 2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,... -
vector 向量容器
2018-03-15 10:31:30vector 向量容器原理vector容器是一个线性结构,用3个指针存放向量的起始字节位置、当前最后一个向量元素的末尾字节,整个容器所占用的内存空间的末尾字节。 对于不要求分配n个元素的vector容器的创建,M_start,M_... -
C++ vector的使用总结及常用vector操作
2019-09-07 00:48:48C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件: #include <vector> 二、使用方式 C++ vector类有两种使用方式: 第一种:... -
Vector集合
2018-08-26 19:28:50Vector是线程安全的,所以速度慢,已经被ArryList所取代。 Vector中 几个重要的方法。 package cn.itcast.p1.vector.demo; import java.util.Enumeration; import java.util.Iterator; import java.... -
Vector创建二维数组
2020-10-15 20:53:44Vector创建二维数组 #include <iostream> #include <vector> using namespace std; int main(){ //创建一个[2222][3333]的二维数组 vector<vector<int> > dp(2222,vector<int>(3333...
-
电力系统综合设计.docx
-
基于非局部均值的图象去噪
-
21年新接口自动化测试视频postman教程 零基础接口测试
-
Java 包(学习 Java 编程语言 035)
-
MFC开发简单聊天程序
-
数据类型转换、运算符、方法入门
-
esp32s2的arduino开发环境
-
arcview3.3.rar
-
大学电路 电路实验部分.zip
-
【数据分析-随到随学】Python语法强化与数据处理
-
强化学习基础知识
-
第1章 Java入门基础及环境搭建【java编程进阶】
-
量化高频交易系统tick数据采集
-
PHP手册整理 - 函数【内置函数(执行外部指令)】
-
试题 入门训练 Fibonacci数列
-
Nginx 实现 后端不停机一直维护
-
基于go-oauth2/oauth2实现OAuth 2.0 授权码方式
-
算法刷题笔记 - 正则表达式匹配(动态规划)
-
数据输出c++.cpp
-
数据结构和算法学习第三节 栈