IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> STL容器板子(vector篇)(后续) -> 正文阅读

[系统运维]STL容器板子(vector篇)(后续)

vector对象的常用内置函数使用:?

#include<vector>
vector<int> a,b;
1.b为向量,将b的0-2个元素赋值给向量a:
a.assign(b.begin(),b.begin()+3);
2.a含有4个值为2的元素:
a.assign(4,2);
3.返回a的最后一个元素:
a.back();
4.返回a的第一个元素:
a.front();
5.返回a的第i元素,当且仅当a存在:
a[i];
6.清空a中的元素:
a.clear();
7.判断a是否为空,空则返回true,非空则返回false:
a.empty();
8.删除a向量的最后一个元素:
a.pop_back();
9.删除a中第一个(从第0个算起)到第二个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)结束:
a.erase(a.begin()+1,a.begin()+3);
10.在a的最后一个向量后插入一个元素,其值为5:
a.push_back(5);
11.在a的第一个元素(从第0个算起)位置插入数值5:
a.insert(a.begin()+1,5);
12.在a的第一个元素(从第0个算起)位置插入3个数,其值都为5:
a.insert(a.begin()+1,3,5);
13.b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6)
a.insert(a.begin()+1,b+3,b+6);
14.返回a中元素的个数:
a.size();
15.返回a在内存中总共可以容纳的元素个数:
a.capacity();
16.将a的现有元素个数调整至10个,多则删,少则补,其值随机:
a.resize(10);
17.将a的现有元素个数调整至10个,多则删,少则补,其值为2:
a.resize(10,2);
18.将a的容量扩充至100:
a.reserve(100);
19.b为向量,将a中的元素和b中的元素整体交换:
a.swap(b);
20.b为向量,向量的比较操作还有 != >= > <= <
eg:a==b;

将这20个操作细分,7,15,16,17是关于vector容器的容量和大小的,1,2,20是有关vector的赋值的,6,8,9,10,11,12,13,14是关于vector容器的插入和删除的,3,4是关于vector容器的数据存取操作的,19是关于vector容器的互换容器的,18是关于vector容器的预留空间的。下面先介绍关于vector函数原型及赋值的知识。

?

一.vector函数原型:

1.vector<T> v;//vector函数原型,默认构造,无参构造

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

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

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

vector的默认构造(无参构造)的例子:



#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void Printvector(vector<int>&v)
{?? ?for(vector<int>::iterator it=v.begin();it!=v.end();it++)
?? ?printf("%d ",*it);
?? ?printf("\n");?
}
void test04()
{?? ?vector<int> v1;
?? ?
?? ?for(int i=0;i<10;i++)
?? ?{?? ?v1.push_back(i);
?? ?}
?? ?
?? ?Printvector(v1);?

    vector<int> v2(v1.begin(),v1.end());//通过区间方式进行构造
    Printvector(v2);
    
    vector<int> v3(10,100);//n个elem方式构造
    Printvector(v3);

    vector<int> v4(v3);//拷贝构造
    Printvector(v4);
}  ?
?
int main()
{    test04();
     return 0;
}
?

?

?二.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);

三.?对向量a赋值的几种方式:

?

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void Printvector(vector<int>&v)
{?? ?for(vector<int>::iterator it=v.begin();it!=v.end();it++)
?? ?printf("%d ",*it);
?? ?printf("\n");?
}
void test05()
{?? ?vector<int> v1;
?? ?
?? ?for(int i=0;i<10;i++)
?? ?{?? ?v1.push_back(i);
?? ?}
?? ?
?? ?Printvector(v1);?

    vector<int> v2;
    v2=v1;
    Printvector(v2);//operator =
    
    vector<int> v3;
    v3.assign(v1.begin(),v1.end());
    Printvector(v3);//assign方法
    
    vector<int> v4;
    v4.assign(10,100);
    Printvector(v4);//n个elem方式赋值
}
int main()
{    test05();
    return 0;
}

//总结:vector赋值方式比较简单,用=或assign均可。
    ?
?

?

?

四:vector容器的容量和大小

#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;

void Printvector(vector<int>&v)
{	for(vector<int>::iterator it=v.begin();it!=v.end();it++)
?	printf("%d ",*it);
?	printf("\n");?
}

void test06()
{	vector<int> v1;
?? ?
?	for(int i=0;i<10;i++)
?? ?{	v1.push_back(i);
?? ?}
?? ?
?? ?Printvector(v1);?
	if(v1.empty())
{	printf("v1为空\n");
}
	else
	{
		printf("v1的容量= \n",v1.capacity());
		printf("v1的大小= \n",v1.size());

	//resize重新指定大小,若指定的更小,超出部分元素被删除
	v1.resize(5);
	Printvector(v1);

	//resize重新指定大小,若指定的更大,默认用0填充新位置,可以用重载版本替换默认填充
	v1.resize(15,10);
	Printvector(v1);
}

int main()
{	test06();
	return 0;
}



/*总结:empty----判断是否为空
        size-----返回元素个数
        capacity------返回容器容量
        resize--------重新指定大小
*/

五:vector容器的插入和删除

push_back(ele) ;//迭代器指向位置pos插入元素ele

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

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

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

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

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

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void Printvector(vector<int>&v)
{?? ?for(vector<int>::iterator it=v.begin();it!=v.end();it++)
?? ?printf("%d ",*it);
?? ?printf("\n");?
}

void test07()
{    
    vector<int> v1;
    //尾插
    v1.push_back(10)
    v1.push_back(20)
    v1.push_back(30)
    v1.push_back(40)
    v1.push_back(50)
    
    //遍历
    Printvector(v1);
    
    //尾删
    v1.pop_back();
    Printvector(v1);

    //插入(第一个参数是迭代器)
    v1.insert(v1.begin(),100);
    Printvector(v1);

    v1.insert(v1.begin(),2,1000);
    Printvector(v1);

    //删除(参数也是迭代器)
    v1.erase(v1.begin());
    Printvector(v1);

    //清空(第一种)
    v1.erase(v1.begin(),v1.end())
    Printvector(v1);

    //清空(第二种)(常用)
    v1.clear();
    Printvector(v1);
}


int main()
{    test07();
     return 0;
}
    


/*总结:push_back----尾插
     pop_back-----尾删
     insert-------插入
     erase--------删除
     clear--------清空
*/

六:vector容器的数据存取

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void test08()
{    
    vector<int> v1;
	
	for(int i=0;i<10;i++)
	{	v1.push_back(i);
	}
    //用[]方式访问数组元素
    for(int i=0;i< v1.size();i++)
    {    printf("%d",v1[i]);
    }
    
    //用at方式访问数组元素
    for(int i=0;i< v1.size();i++)
    {    printf("%d",v1.at(i));
    }
    
    printf("\n");

    //获取第一个元素
    printf("第一个元素为: ",v1.front());

    //获取最后一个元素
    printf("最后一个元素为: ",v1.back()); 
}


int main()
{    test08();
     return 0;
}



/*总结:迭代器、at、[]可以获取vector容器中的元素
  front返回容器中第一个元素
  back返回容器中最后一个元素
*/

七:vector容器的互换容器

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void Printvector(vector<int>&v)
{?? ?for(vector<int>::iterator it=v.begin();it!=v.end();it++)
?? ?printf("%d ",*it);
?? ?printf("\n");?
}
void test09()
{
    vector<int> v1;

	//遍历
	for(int i=0;i<10;i++)
	{	v1.push_back(i);
	}
    Printvector(v1);

    //逆向输出v1
    vector<int> v2;
    for(int i=10;i>0;i--)
    {   v2.push_back(i);
    }
    Printvector(v2);
    
    //将v1和v2交换
    printf("交换后: \n");
    v1.swap(v2);
    Printvector(v1);
    Printvector(v2);
}

int main()
{    test09();
    return 0;
}

八:vector容器的预留空间

功能描述:减少vector在动态扩展容量时的扩展次数。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void test10()
{    
    vector<int> v;

    //用reserve预留空间
    v.reserve(100000);

    int mun=0;//统计开辟空间的次数
    int *p=NULL;
    
    for(i=0;i<100000;i++)
    {    
        v.push_back(i);

        if(p!=&v[0])//&v[0]是v的首地址
        {    p=&v[0];
             num++;
        }
    } 
    printf("%d\n",num);
}

int main()
{    test10();
    return 0;
}

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:27:52  更:2022-01-08 14:28:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:54:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码