ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

vector容器 单端数组、动态数组

2021-04-17 15:02:13  阅读:152  来源: 互联网

标签:容器 end iterator int 元素 单端 vector 数组


 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 void test01()
 8 {
 9     vector<int> v;
10     for(int i =0;i<10;i++)
11         v.push_back(i);
12     cout << v.capacity() << endl;//容量capacity
13 }
14 void PrintVec(vector<int> &v)
15 {
16     for(vector<int>::iterator it =v.begin();it != v.end();it++)
17     {
18         cout << *it << " ";
19     }
20     cout << endl;
21 }
22 void test02()
23 {
24     int arr[] = {2,3,4,1,9};
25     vector<int>v(arr,arr+sizeof(arr)/sizeof(int));
26     vector<int> v1(v.begin(),v.end());
27     //PrintVec(v1);
28     
29     vector<int>v3(10,3);
30     //PrintVec(v3);
31     
32     //assign赋值
33     vector<int>v4;
34     v4.assign(v3.begin(),v3.end()) ;
35     //PrintVec(v4);
36     
37     //swap交换
38     v4.swap(v);
39     //PrintVec(v4);
40     
41     
42     //size大小
43     cout << v4.size() << endl;
44     
45     //empty
46     if(v4.empty())
47     {
48         cout << "v4 is empty" << endl;
49     }
50     else
51     {
52         cout << "v4 is not empty" << endl;
53     }
54     //v4.resize(10);重置大小resize,默认值0
55     v4.resize(10,-1);//重载第二个参数为赋给默认值-1
56     PrintVec(v4);
57     
58     v4.resize(3);
59     PrintVec(v4);
60     
61 }
62 int main()
63 {
64     test02();
65 }

构造函数

vector<T> v; //采用模板实现类实现,默认构造函数

vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。

vector(n, elem);//构造函数将n个elem拷贝给本身。

vector(const vector &vec);//拷贝构造函数。

 

//例子 使用第二个构造函数 我们可以...

int arr[] = {2,3,4,1,9};

vector<int> v1(arr, arr + sizeof(arr) / sizeof(int)); 

vector常用赋值操作

assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。

assign(n, elem);//将n个elem拷贝赋值给本身。

vector& operator=(const vector  &vec);//重载等号操作符

swap(vec);// 将vec与本身的元素互换。

vector大小操作

 

size();//返回容器中元素的个数

 

empty();//判断容器是否为空

 

resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

 

resize(int num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长>度的元素被删除。

 

capacity();//容器的容量

 

reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。

 

void test03()
{
    vector<int> v;
    for(int i = 0;i<100000;i++)
    {
        v.push_back(i);
    }
    cout << v.capacity() << endl;
    cout << v.size() << endl;
    
    v.resize(3);
    cout << v.capacity() << endl;
    cout << v.size() << endl;
    
    vector<int>(v).swap(v);
        //创建匿名对象vector<int>() 完成swap与匿名对象交换
    cout << v.capacity() << endl;
    cout << v.size() << endl;
}

vector数据存取操作

 

at(int idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range异常。

 

operator[];//返回索引idx所指的数据,越界时,运行直接报错

 

front();//返回容器中第一个数据元素

 

back();//返回容器中最后一个数据元素

vector插入和删除操作

 

insert(const_iterator pos, int count,ele);//迭代器指向位置pos插入count个元素ele.

 

push_back(ele); //尾部插入元素ele

 

pop_back();//删除最后一个元素

 

erase(const_iterator start, const_iterator end);//删除迭代器从start到end之间的元素

 

erase(const_iterator pos);//删除迭代器指向的元素

 

clear();//删除容器中所有元

 

void test04()
{
    vector<int>v;
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    cout << v.front() <<"    " <<  v.back() << endl;
    
    v.insert(v.begin(),2,100);
    PrintVec(v);
    
    v.pop_back();
    PrintVec(v);
    cout << "----------------------" <<endl;
    v.erase(v.begin());
    PrintVec(v);
    
    v.erase(v.begin(),v.begin()+3);
    PrintVec(v);
    
    v.clear();
    PrintVec(v);
}
void test05()
{
    vector<int>v;
    for(int i=0;i<10;i++)
    {
        v.push_back(i);
    }
    for(vector<int>::reverse_iterator it = v.rbegin();it != v.rend();it++)
    {
        cout << *it << "  ";
    }
    cout << endl;

    vector<int>::iterator itbegin = v.begin();
    itbegin = itbegin + 3;
    //如果上述写法不报错,这个迭代器就是随机访问迭代器
    
}

 

标签:容器,end,iterator,int,元素,单端,vector,数组
来源: https://www.cnblogs.com/helloql/p/14670762.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有