精华内容
下载资源
问答
  • STL-vector函数的使用

    2020-03-18 12:10:56
    先介绍常用的函数头文件自然是#include 定义 vector v; 当然有需求二维甚至更高也可以定义 vector<vector > myv; 接下来就是一些列常用函数: 判断是否为空:v.empty(); 查看vector内数据量大小:v....

    STL-vector函数的使用

    话不多说,开始进入正式环节:

    • 头文件自然是#include <vector>

    • 定义 vector<int> v; 当然有需求二维甚至更高也可以定义 vector<vector<int> > myv

    • 接下来就是一些列的常用函数:

      1. 判断是否为空:v.empty();

      2. 查看vector内数据量的大小:v.size();

      3. 尾部压入数据:v.push_back(date);

      4. 尾部弹出数据:v.pop_back()

      5. 清空vector内的数据,但是空间保留:v.clear();

      6. 在某个pos之前的位置插入num个val:v.inxert(pos,num,val);

      7. 对vector中元素进行排序:sort(v.begin(),v.end()),借助于头文件#include <algorithm>中的sort函数,方便快捷由小到大进行排序

        • 大多数人都认为sort底层应该是快排,但其实并不如此
          - 通常会设置一个SORT_MAX(通常为16),当排序元素的个数小于SORT_MAX,使用插入排序,避免快排递归调用带来额外负荷;当递归层次过深时,则采用堆排序;其余情况才是用我们所谓的快排来进行排序;
          在这里插入图片描述
          快速排序:

          #include <iostream>
          #include <vector>
          using namespace std;
          
          int partition(vector<int> &nums,int left, int right){
              int key=nums[left];
              while(left<right){
                  while(left<right&&key<nums[right]) right--;
                  if(left<right) nums[left++]=nums[right];
                  while(left<right&&key>nums[left]) left++;
                  if(left<right) nums[right--]=nums[left];
              }
              nums[left]=key;
              return left;
          }
          
          void quick_sort(vector<int> &nums,int left, int right){
              if(left>right) return;
              int k=partition(nums,left,right);
              quick_sort(nums,left,k-1);
              quick_sort(nums,k+1,right);
          }
          

          插入排序:

          #include <iostream>
          #include <vector>
          using namespace std;
          
          void insert_sort(vector<int> &nums){
              for(int i=1; i<nums.size(); i++){
                  for(int j=i-1; j>=0&&nums[j+1]<nums[j]; j--){
                      swap(nums[j],nums[j+1]);
                  }
              }
          }
          

          堆排序:

          #include <iostream>
          #include <vector>
          using namespace std;
          
          void adjust_heap(vector<int> &nums, int node, int len){
              int left_son = 2*node + 1;
              int right_son = 2*node + 2;
              int maxIdx = node;
              if(left_son<len && nums[left_son] > nums[maxIdx]) maxIdx = left_son;
              if(right_son<len && nums[right_son] > nums[maxIdx]) maxIdx = right_son;  
              if(maxIdx != node){
                  swap(nums[maxIdx], nums[node]);
                  adjust_heap(nums, maxIdx, len);       
              }
          }
          
          void heap_sort(vector<int> &nums){
              for(int i=nums.size()/2-1; i>=0; i--){
                  adjust_heap(nums,i,nums.size());
              }
              for(int j=nums.size()-1; j>0; j--){
                  swap(nums[0],nums[j]);
                  adjust_heap(nums,0,j);
              }
          }
          
      8. 删除其中的某个元素:v.erase(v.begin()+pos);这里需要注意删除其中元素会导致迭代器的失效,要注意调整迭代器的位置:

        • 假设删除其中为5倍数的元素:

          `for(auto ite=v.begin(); ite!=v.end(); ite++){  
          	if(*ite%5==0){
           		v.erase(ite);
           		ite--; 
           		}
           }`
          

          删除元素后,后面的数据会依次向前进一位,也就是说下一个要检查的元素仍然位于当前下标处,所以需要进行减减操作,保证下一次判断的还是原位置的新元素

      9. 判断某个元素是否存在:auto ite=find(v.begin(),v.end(),findDate);

      10. 获取末尾数字 :int date=v.back();

    1. vector常问问题:
      1. 底层实现:动态数组的形式进行数据的存储
      2. 如何进行内存分配:通过比较内部的数据量大小(size)和申请的内存大小(capacity),当size<capacity时,数据正常进行插入;当size==capacity,若还有数据插入,需要另外申请一块大的内存,通常为2倍增长,然后将原内存数据复制过来,销毁之前的内存,在进行正常的数据插入。这里会引出一个问题,往一个vector中压入N个数据的平均时间复杂度是多少,反正我是没看懂,各位可以自行百度,我太菜了。。。。
    展开全文
  • C++vector函数的使用

    2020-03-12 15:48:44
    vector 是C++ STL一个重要成员,使用它时需要包含头文件: #include<vector>; 一、vector 初始化:可以有五种方式,举例说明如下: (1) vector<int> a(10); //定义了10个整型元素向量(尖括号...
    以下为vector的用法(摘录)
    
    vector 是C++ STL的一个重要成员,使用它时需要包含头文件:
    
    #include<vector>;
    一、vector 的初始化:可以有五种方式,举例说明如下:
    
        (1) vector<int> a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。2)vector<int> a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为13)vector<int> a(b); //用b向量来创建a向量,整体复制性赋值4)vector<int> a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素5int b[7]={1,2,3,4,5,9,8};
            vector<int> a(b,b+7); //从数组中获得初值
    二、vector对象的几个重要操作,举例说明如下:
    
        (1)a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a2)a.assign(4,2); //是a只含4个元素,且每个元素为23)a.back(); //返回a的最后一个元素4)a.front(); //返回a的第一个元素5)a[i]; //返回a的第i个元素,当且仅当a[i]存在2013-12-076)a.clear(); //清空a中的元素7)a.empty(); //判断a是否为空,空则返回ture,不空则返回false8)a.pop_back(); //删除a向量的最后一个元素9)a.erase(a.begin()+1,a.begin()+3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+         3(不包括它)10)a.push_back(5); //在a的最后一个向量后插入一个元素,其值为511)a.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,412)a.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为513)a.insert(a.begin()+1,b+3,b+6); //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8         ,插入元素后为1,4,5,9,2,3,4,5,9,814)a.size(); //返回a中元素的个数;15)a.capacity(); //返回a在内存中总共可以容纳的元素个数16)a.resize(10); //将a的现有元素个数调至10个,多则删,少则补,其值随机17)a.resize(10,2); //将a的现有元素个数调至10个,多则删,少则补,其值为218)a.reserve(100); //将a的容量(capacity)扩充至100,也就是说现在测试a.capacity();的时候返回值是100.这种操作只有在需要给a添加大量数据的时候才         显得有意义,因为这将避免内存多次容量扩充操作(当a的容量不足时电脑会自动扩容,当然这必然降低性能) 19)a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换20)a==b; //b为向量,向量的比较操作还有!=,>=,<=,>,<
    三、顺序访问vector的几种方式,举例说明如下:
    (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=1;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;
    //这种做法以及类似的做法都是错误的。刚开始我也犯过这种错误,后来发现,下标只能用于获取已存在的元素,而现在的a[i]还是空的对象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]<<" ";
    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<<" ";
    四、几种重要的算法,使用时需要包含头文件:
    
    #include<algorithm>1sort(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列2reverse(a.begin(),a.end()); //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列,如a中元素为1,3,2,4,倒置后为4,2,3,13copy(a.begin(),a.end(),b.begin()+1); //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素4find(a.begin(),a.end(),10); //在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置
    
    
    展开全文
  • 1、加减运算 函数对象 push (1,2) 2、逻辑运算 与或非 logic_not() 在vector中创建一个bool 类型数组、 vector v; 3、比较运算 比大小 greater () 大返回真 less()小返回真 下面展示一些 内联代码片。 // A ...

    1、加减运算 函数对象
    push (1,2)
    2、逻辑运算 与或非
    logic_not()
    在vector中创建一个bool 类型的数组、
    vector v;

    3、比较运算 比大小
    greater () 大的返回真
    less()小的返回真
    下面展示一些 内联代码片

    // A code block
    #include<iostream>
    
    // An highlighted block
    var foo = 'bar';
    ```#include<iostream>
    using namespace std;
    #include<vector>
    #include<functional>
    #include<algorithm>
    
    void test01() {
    	//创建一个vector bool 类型的数组
    	vector<bool> v;
    	v.push_back(true);
    	v.push_back(false);
    	v.push_back(true);
    	v.push_back(false);
    	for (vector<bool>::iterator it = v.begin(); it !=v.end(); it++)
    	{
    		cout << *it << endl;
    	}
    	//大的放前面  倒序
    	//sort(v.begin(), v.end(), greater<int>());
    	//for (vector<bool>::iterator it = v.begin(); it != v.end(); it++)
    	//{
    	//	cout << *it << endl;
    	//}
    	//与或非 放到
    	vector<bool> v2;
    	v2.resize(v.size());
    	//搬运算法 需把东西赛到一个容器  如果这个容器没有大小,那么就塞不进去。所以resize()
    	transform(v.begin(), v.end(), v2.begin(),logical_not<bool>());
    	for (vector<bool>::iterator it = v2.begin(); it != v2.end(); it++)
    	{
    		cout << *it << endl;
    	}
    
    
    }
    
    
    int main() {
    	test01();
    
    }
    
    展开全文
  • vector函数

    2015-02-05 22:56:43
    在c++中,vector是一个十分有用容器,下面对这个容器做一下总结。 1 基本操作 (1)头文件#include. (2)创建vector对象,vector vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout...

    在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。

    1 基本操作

    (1)头文件#include<vector>.

    (2)创建vector对象,vector<int> vec;

    (3)尾部插入数字:vec.push_back(a);

    (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

    (5)使用迭代器访问元素.

    vector<int>::iterator it;
    for(it=vec.begin();it!=vec.end();it++)
        cout<<*it<<endl;

    (6)插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

    (7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素

    vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

    (8)向量大小:vec.size();

    (9)清空:vec.clear();

    2

    vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。下面是一段简短的程序代码:

    复制代码
    #include<stdio.h>
    #include<algorithm>
    #include<vector>
    #include<iostream>
    using namespace std;
    
    typedef struct rect
    {
        int id;
        int length;
        int width;

      //对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。
      bool operator< (const rect &a)  const
        {
            if(id!=a.id)
                return id<a.id;
            else
            {
                if(length!=a.length)
                    return length<a.length;
                else
                    return width<a.width;
            }
        } }Rect;
    int main() { vector<Rect> vec; Rect rect; rect.id=1; rect.length=2; rect.width=3; vec.push_back(rect); vector<Rect>::iterator it=vec.begin(); cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl; return 0; }
    复制代码

     3  算法

    (1) 使用reverse将元素翻转:需要头文件#include<algorithm>

    reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器,

    一般后一个都不包含.)

    (2)使用sort排序:需要头文件#include<algorithm>,

    sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

    可以通过重写排序比较函数按照降序比较,如下:

    定义排序比较函数:

    bool Comp(const int &a,const int &b)
    {
        return a>b;
    }
    调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。

    展开全文
  • vector函数总结

    万次阅读 多人点赞 2018-09-04 10:17:52
    觉得vector用处蛮多,所以特地稍微总结一下 1、基本操作 ((1)头文件#include&amp;lt; vector &amp;gt;. (2)创建vector对象,vector&amp;lt; int &amp;gt; vec; (3)尾部插入数字:vec.push_...
  • vector函数用法

    2019-11-27 21:18:34
    (1)头文件#include <vector> (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始。 (5)使用迭代器...
  • 2021-01-18(vector函数

    2021-01-18 22:46:41
    vector函数 头文件:#include<vector>还要加上using namespace std; 1.push_back 在数组最后添加一个数据 2.pop_back 去掉数组最后一个数据 3.at 得到编号位置数据 4.begin 得到数组头指针 5.end 得到...
  • vector常用函数

    2019-04-11 15:50:30
    vector常用函数 包含头文件< vector > 1. 初始化 如: vector<int> first; // 创建一个空的vector vector<int> second (4,100); // 创建一个带有4个100的vector vector<int> third (second....
  • 觉得vector用处蛮多,所以特地稍微总结一下 1、基本操作 ((1)头文件#include< vector >. (2)创建vector对象,vector< int > vec; (3)尾部插入数字:vec.pu...
  • 模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如向量,我们可以定义许多不同类型的向量,比如vectorvector 。您...
  • 【STL】vector函数用法总结

    千次阅读 2016-09-14 08:54:18
    本文介绍了std::vector中成员函数的用法,详细解释了如何如使用这些成员函数。本人对于STL来说,还是一个初学者。若本博文有什么错误,欢迎大家批评指正。下文中有用到迭代器,不懂的读者可以就把它当做一个指针,...
  • 想法是在vector对象中寻找int型数值,函数声明在头文件中,函数定义在源文件中。 函数声明如下: bool findInt(vector<int>::iterator begin, vecotor<int>::iterator end, int ival); 但是...
  • reverse函数用于反转在[first,last)范围内顺序(包括first指向元素,不包括last指向元素), reverse函数无返回值 例如: string str="hello world , hi"; reverse(str.begin(),str.end());//str结果为 ih , ...
  • 简介标准库类型vector表示对象的集合,其中所有... 想用vector,必须包含适当的头文件。#include <vector> using std::vector;C++既有类模板也有函数模板,其中vector是一个类模板。只有对C++有了相当深入的理...
  • 头文件

    2020-04-20 16:11:36
    #include<...#include//使用C风格字符串函数的头文件 #include//使用算法库的头文件,max,min,swap,sort等 #include//使用cin,cout的头文件 #include//使用string时的头文件 #include//使用vector时的头...
  • C++头文件algorithmfind 函数

    千次阅读 2018-11-24 23:21:23
    很多语言都内置了非常方便查找函数方便我们调用,其实C++中也有find函数vector中 使用find()函数需要#include&lt;algorithm&gt;,例如: vector&lt;string&gt; ar1; ar1.push_back("...
  • 列举了一些基本增删查改的函数: #include <vector> //头文件 vector<int>v; //声明 v.push_back(element); //插入元素到末尾 v.insert(v.begin(),1) //在第0个元素前面插入1 ...
  • c++ 头文件中定义函数的优缺点

    千次阅读 2015-08-25 09:08:38
    最近看caffe 代码, 有些头文件中 ,直接实现了该函数。...基于这个,这篇博客重点在讨论 头文件实现函数的优缺点。 比如caffe 在layer.hpp中实现 emplate inline void Layer::Backward(const vector*>& t
  • stl中vector的函数

    2016-10-16 13:22:43
    STL之vector容器详解 ector 容器vector是C++标准模版库(STL,Standard Template Library)中部分内容。...使用vector容器之前必须加上头文件:#include;vector属于std命名域内容,因此需要通过命
  • c++中关于vector容器各种函数介绍 头文件: #include < vector > 一、vector容器构造函数函数原型: vector< T > v ; 采用横板实现类实现,默认构造函数 vector(v.begin(), v.end()); 将v...
  • 用C写这个 第一个想法是建一个child[1e5+2][1e5+2],感觉有点大 系统会崩,而且还得额外再建一个num[1e5+2]存储每个节点孩子数量,于是改用C++超棒的vector vector常用函数 简单定义 vector&lt;int&gt;obj...
  • 关于algorithm头文件的count函数

    千次阅读 2010-10-09 13:28:00
    algorithm头文件的count函数,其功能类似于find,这个函数使用一对迭代器和一个值做参数,返回这个值出现次数统计结果。 example: <br />#include "stdafx.h" #include <iostream><br />#...
  • max,min函数头文件windows.h中 vector头文件vector.h中
  • 一个包含所有c++的头文件的头文件

    万次阅读 2017-01-18 17:16:21
    做CF看见别人用这个函数,然后就能直接用vector,set,string那些函数了,摸不着头脑,感觉特神奇就百度了一下,才发现这个是C++版本升级,然后文件自带,方便了程序员吧。不然每次都得敲那模板老长…… 使用和平常...
  • C++ vector构造函数

    千次阅读 2020-07-02 19:40:57
    vector(向量)是向量类型,使用需要包含头文件#include<vector>; vector是一个封装了动态大小数组顺序容器,跟其他任意类型容器一样,它能够存放各种类型对象,可以简单认为,vector是一个能够存放...
  • vector vector< int > vi; vi.push_back(i); vi.pop_back();... //在it迭代器指定位置上插入一个元素x,vectorit处及其后面元素顺次向后移动一位 vi.erase(it); vi.erase(first, last);...
  • //vector使用头文件#include vector > ary(5,vector(5,5)); /*这里使用vector创建了一个ary数组,ary单位是vector,有五个单位 每个单位又是一个vector(5,5)代表有五个元素每个元素内容为5 */
  • vector类中构造函数

    千次阅读 2014-11-05 20:13:49
    向量容器使用动态数组存储、管理对象。因为数组是一个随机访问数据结构,所以可以随机...包含vector的头文件名是vector。所以,如果要在程序里使用向量容器,就要在程序中包含下面语句: #include 此外,在定义
  • 1、min;max; 2、generate(vector.begin(), vector.end(), std::rand) :生成随机数序列; 3、count_if(vector.begin(), vector.end(), function):判断function返回true元素个数;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,343
精华内容 537
关键字:

vector函数的头文件