vector的构造函数
//
// Created by whist on 2020/4/11.
//vector的构造函数
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int>&v){//打印函数
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
int main(){
//默认无参构造
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);
//n个elem方式构造
vector<int>v3(10,100);//10个数,其值为100
printVector(v3);
//拷贝构造
vector<int>v4(v3);
printVector(v4);
}
vector的赋值操作
//
// Created by whist on 2020/4/11.
//vector的赋值操作
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int>&v){//打印函数
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test1(){
vector<int>v1;
for(int i=0;i<10;i++){
v1.push_back(i);
}
printVector(v1);
//赋值
vector<int>v2;
v2=v1;
printVector(v2);
/*和构造函数很像 非构造通过assign来赋值*/
//assign赋值
vector<int>v3;
v3.assign(v1.begin(),v1.end());
printVector(v3);
//n个elem赋值
vector<int>v4;
v4.assign(10,100);
printVector(v4);
}
int main(){
test1();
}
vector容量和大小
代码:
//
// Created by whist on 2020/4/11.
//vector容量和大小
/**
* ·判断是否为空:empty
* ·返回元素个数:size
* ·返回容器容量:capacity
* ·重新指定大小:resize
*/
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int>&v){//打印函数
vector<int>::iterator it;
for(it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01(){
vector<int>v1;
for(int i=0;i<10;i++){
v1.push_back(i);
}
printVector(v1);
/*判断容器是否为空*/
if(v1.empty()){//为真即为空
cout<<"v1为空"<<endl;
}else{
cout<<"v1不为空"<<endl;
cout<<"v1的容量为"<<v1.capacity()<<endl;//容量一定>=.size()
cout<<"v1的大小为"<<v1.size()<<endl;
}
/*重新指定大小resize()*/
// v1.resize(15); //默认用0填充后面的数字
v1.resize(15,100); //填充值为100
printVector(v1);
v1.resize(10); //如果重新指定比原来断,超出部分被删除
printVector(v1);
}
int main(){
test01();
}
插入与删除
代码:
//
// Created by whist on 2020/4/11.
//
#include<iostream>
#include <vector>
using namespace std;
void printVector(vector<int>&v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test01(){
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); //第一个参数是迭代器
v1.insert(v1.begin(),2,1000);//重载版本:插入2个1000
vector<int>::iterator it=v1.begin();
v1.insert(it+2,200); //在第几个元素后面插入就+几
printVector(v1);
//删除
v1.erase(v1.begin());
v1.erase(v1.begin(),v1.end()); //重载版本:区间删除
printVector(v1);
}
int main(){
test01();
}
数据存取
//
// Created by whist on 2020/4/11.
//数据存取
#include<iostream>
#include <vector>
using namespace std;
void test01(){
vector<int>v1;
for(int i=0;i<10;i++){
v1.push_back(i);
}
//利用[]方式访问数组中数据
for(int i=0;i<v1.size();i++){
cout<<v1[i]<<" ";
}
cout<<endl;
//利用at访问元素
for(int i=0;i<v1.size();i++){
cout<<v1.at(i)<<" ";
}
cout<<endl;
}
int main(){
test01();
}
互换容器
//
// Created by whist on 2020/4/11.
//互换容器
#include <iostream>
#include <vector>
using namespace std;
void printVector(vector<int>&v){
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
int test01(){
vector<int>v1,v2;
cout<<"交换前"<<endl;
for(int i=0;i<10;i++){
v1.push_back(i);
}
printVector(v1);
for(int i=10;i>0;i--){
v2.push_back(i);
}
printVector(v2);
cout<<"交换后"<<endl;
v1.swap(v2);
printVector(v1);
printVector(v2);
}
/*巧用swap可以收缩内存空间*/
void test02(){
vector<int>v;
for(int i=0;i<100000;i++){
v.push_back(i);
}
cout<<"v的容量"<<v.capacity()<<endl;
cout<<"v的大小"<<v.size()<<endl;
v.resize(3);//重新指定大小
cout<<"v的容量"<<v.capacity()<<endl;
cout<<"v的大小"<<v.size()<<endl;
//巧用swap收缩内存
vector<int>(v).swap(v);
/**
* vector<int>(v)叫匿名对象,按v的元素来初始化匿名对象即
* (v)里面有v的元素,容量为3
* (v).swap就是把(v)容器和v交换,v容量变成3
* 匿名对象执行完任务被编译器自动清理掉
*/
cout<<"v的容量"<<v.capacity()<<endl;
cout<<"v的大小"<<v.size()<<endl;
}
int main(){
// test01();
test02();
}
vector预留空间
代码:
//
// Created by whist on 2020/4/11.
//vector预留空间
#include <iostream>
#include <vector>
using namespace std;
void test01(){
vector<int>v;
int num=0;//统计开辟的次数
int *p=NULL;
for(int i=0;i<100000;i++){
v.push_back(i);
if(p!=&v[0]){
p=&v[0];
num++;
}
}
cout<<num<<endl;//18
};
void test02(){
vector<int>v;
//利用reserve预留空间
v.reserve(100000);
int num=0;//统计开辟的次数
int *p=NULL;
for(int i=0;i<100000;i++){
v.push_back(i);
if(p!=&v[0]){
p=&v[0];
num++;
}
}
cout<<num<<endl;//1
};
int main(){
test01();
test02();
}
for_each
//
// Created by whist on 2020/4/17.
//
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void myPrint(int val){
cout<<val<<endl;
}
int main(){
vector<int>v(4,5);
v.at(1)=1;
v.at(2)=2;
v.at(3)=3;
//用STL提供的算法遍历vector
//迭代器是算法和容器的粘合剂 有算法一定有迭代器
for_each(v.begin(),v.end(),myPrint);
}
vector存放自定义数据类型
//
// Created by whist on 2020/4/17.
//vector存放自定义数据类型
#include <iostream>
#include <vector>
using namespace std;
class Person{
public:
Person(string name,int age){
this->name=name;
this->age=age;
}
string name;
int age;
};
int main(){
/**
* 存放自定义数据类型
*/
vector<Person>v;
Person p1("aaa",10);
Person p2("bbb",20);
Person p3("ccc",30);
Person p4("ddd",40);
Person p5("eee",50);
//向容器中插入数据
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
v.push_back(p4);
v.push_back(p5);
//遍历容器数据
for(vector<Person>::iterator it=v.begin();it!=v.end();it++){
cout<<"姓名"<<(*it).name;
cout<<"年龄"<<it->age<<endl;//指针可以用->
}
/**
* 存放自定义数据类型的指针
*/
vector<Person*>v1;
// p1("aaa",10);
// p2("bbb",20);
// p3("ccc",30);
// p4("ddd",40);
// p5("eee",50);
//向容器中插入数据
v1.push_back(&p1);
v1.push_back(&p2);
v1.push_back(&p3);
v1.push_back(&p4);
v1.push_back(&p5);
//遍历容器
for(vector<Person*>::iterator it=v1.begin();it!=v1.end();it++){
cout<<"姓名"<<(*it)->name;
cout<<"年龄"<<(*it)->age<<endl;
}
}
嵌套的vector
//
// Created by whist on 2020/4/17.
// 嵌套的vector
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<vector<int>>v;//嵌套的vector
//创建小容器
vector<int>v1;
vector<int>v2;
vector<int>v3;
vector<int>v4;
//小容器中添加数据
for(int i=0;i<4;i++){
v1.push_back(i+1);
v2.push_back(i+2);
v3.push_back(i+3);
v4.push_back(i+4);
}
//小容器插入到大容器中
v.push_back(v1);
v.push_back(v2);
v.push_back(v3);
v.push_back(v4);
//大容器遍历
for(vector<vector<int>>::iterator it=v.begin();it!=v.end();it++){
for(vector<int>::iterator vit=(*it).begin();vit!=(*it).end();vit++){
cout<<*vit<<" ";
}
cout<<endl;
}
}