C++ Vector知识点

定义

vector:向量(动态数组)是连续的空间,空间不够用的,会申请一个更大的连续的空间,同时迭代器失效


头文件

#include < vector >
Using namespace std;


定义向量的对象

1.可以为int,double,char(本质和string一样)

void STLDefine( )
{
     vector<int> vec;
 }

2.可以为结构体

void STLDefine( )
{
      struct STU
      {
         int age;
       };
    vector<struct STU> vec;
 }

3.可以为指针

void STLDefine( )
{
      vector<int*> vce;
 }

4.可以放对象

  • 普通类对象
  • 其他容器的对象
void STLDefine( )
{
      vector<string> vec;  //相当于一个字符串数组
 }

构造函数

  • 无参数的构造
  • n个元素
  • 用num个val来初始化容器
  • 用另一个vector对象初始化当前的vector对象
  • 迭代器初始化
void STLConstructor( )
{
     vector<int> vec;       //无参数
     vector<int> vec1(5);   //5个元素,均初始化为0
     vector<int> vec2(5,12); //5个元素,均初始化为12
     vector<int> vec3(vec2); //用vec2对象初始化当前的vec3对象
     //下面三行是用迭代器初始化的
     vector<int>::iterator ite = vec2.begin();
     vector<int>::iterator ite1 = vec2.end();
     vector<int> vec4(ite,ite1); 

属性

1.容量(重新分配容量后,迭代器失效

(1)capacity( )

  • 初始容量:vs2005定义对象的时候初始化几个那么容量就是几,无参数就是0
  • 空间不够了,新空间的容量:容量不够时增加,增加现有容量的一半(e.g.:现有10个,新的就是15个;现有13个,新的就是19个)
  • vc6.0:容量不够增加时增加现有容量的一倍(e.g.:现有10个,新的就是20个)
void STLCapacity( )
{
      vector<int> vec;
      cout << vec.capacity() << endl;
 }

(2) reserve( )

  • 修改容量,不能变小,只能变大
  • 设置多大就是多大
void STLCapacity( )
{
     vector<int> vec;
     vec.reserve(10);    //容量从0变为10
 }

2.大小

(1)size( ) 元素个数

void STLCapacity( )
{
     vector<int> vec(6);
     cout << vec.size() <<endl; //6个元素
 }

(2)resize( )

  • 重新设置元素个数
  • 容量不变
void STLCapacity( )
{
    vector<int> vec(5);
    vec.resize(4);   //个数为4  容量为5
 }   

(3)empty( ) 对象是否有元素

  • 空返回1
  • 非空返回0
void STLCapacity( )
{ 
     vector<int> vec;
     vector<int> vec1(5,12);
     cout << vec.empty() <<endl;   //1
     cout << vec1.empty() <<endle; //0

操作

1.增

加尾用push_back()即可
加中间部分用insert

void STLAdd( )
{
    vector<int> vec;
    vector<int>vec1(5);
    for(int i=0 ;i<10 ;i++)
    {
      vec.push_back(i);
     }
     vec.insert(vec,begin()+2,6);  //将第3个位置改为 6
     vec.insert(vec,begin()+1,6,15);  //从第二个开始插6个15
     vec1.insert(vec1.begin()+3,vec.begin(),vec.begin()+3);
     // 从vec1的第四个位置上插入vec的第1个位置到第3个位置上的元素

2.删

  • 尾删除pop_back();
  • 删除指定元素 1.iterator erase();删除一个 2.iterator erase( , );删除一段
void STLDel( )
{
     vector<int> vec;
     for(int i=0 ;i<10 ;i++)
     {
     vec.push_back(i);
     }
     vec.pop_back();  //删最后一个
     vec.erase(vec.begin()+5);  //删第6个
     vec.erase(vec.begin()+2,vec.end(); //删第3个到最后一个
}

3.改

利用输出形式修改

4.查

(1)输出全部

  • 循环 1.迭代器 2.下标运算
  • for_each( )
void fun(int i)
{
      cout <**< i <<** endl;
 }
void STLDD( )
{
    vector<int> vec;
    for(int i=0 ;i<10 ;i++)
    {
       vec.push_back(i);
     }  
     for(int i=0 ;i<10 ;i++)
     {
       cout << vec[i] << endl; //循环:下标运算
      } 
      vector<int>::iterator ite = vec.begin();
      for(ite ;ite!=vec.end() ;ite++)
      {
         cout << *ite << endl; //循环:迭代器输出
       }  
       for_each(vec.begin(), vec.end(), fun);   //for_each()使用需加#include<algorithm>头文件
 }      

(2)输出单个元素

  • at( )
  • [ ]下标输出
  • back( ) 输出最后一个元素
  • begin( ) 输出第一个元素
void STLDD( )
{
      vector<int> vec;
      for(int i=0 ;i<10 ;i++)
      {
          vec.push_back(i);
       }
       cout << vec[5] << endl;     //下标输出
       for(int i=0 ;i<10 ;i++)
       {

           cout << vec.at(i) <<endl; //at()输出,at()函数遇到越界时可以抛出异常,使程序顺利进行
           cout << vec.back() << endl; //输出最后一个元素
           cout << vec.begin() << endl; //输出第一个元素
           
        }
 }              

5.交换两个向量的内容

void STLSwap()
{
    vecor<int> vec(5,6);
    vector<in> ve1(5,12);
    vec.swap(vec1);
 }

运算符重载

  • v1 == v2
  • v1 != v2
  • v1 <= v2
  • v1 >= v2
  • v1 < v2
  • v1 > v2
void STLchong()
{
   vector<int> vec(5,3);
   vector<in> vec1(6,2);
   cout << (vec>vec1) << endl;   //满足括号内返回1  不满足返回0  比大小规则与字符串比大小类似
}   

用两个算法

  • 头文件 #include< algorithm >
  • 遍历 for_each
  • 排序sort
void STLSuan( )
{
    vecor<int> vec;
    vec.push_back(2);
    vec.push_back(1);
    vec.push_back(4);
    vec.push_back(3);
    sort(vec.begin()+1 , vec.end());  //第二个到最后一个进行从小到大排序
    sort( vec.begin()+1 , vec.end() , greate<int>() );      //从大到小排序,用greater需要加头文件#include<functional>

在这里插入图片描述

发布了5 篇原创文章 · 获赞 22 · 访问量 1649

猜你喜欢

转载自blog.csdn.net/wmy0217_/article/details/103891509