skfjh

 

STL容器学习(二)

2 vector

向量(动态数组)

头文件 #include<vector>

    using namespace std;

 

定义向量对象 vecyor<int> vec;

vecyor容器的初始化

 

#include<iostream>
#include<string>
#include<vector> 
using namespace std;
int main()
{
    vector<int> vec1(5,12);
    vector<int> vec2(5,'a');
    for(int i=0;i<5;i++)
    {
        cout<<vec1[i]<<"\n"<<vec2[i]<<"\n";
    }
    return 0;

 

#include<iostream>
#include<string>
#include<vector> 
using namespace std;
int main()
{
    vector<int> vec1(5,12);
    vector<char> vec2(5,'a');
    for(int i=0;i<5;i++)
    {
        cout<<vec1[i]<<"\n"<<vec2[i]<<"\n";
    }
    return 0;
}

 

#include<iostream>
#include<string>
#include<vector> 
using namespace std;
int main()
{
    vector<int> vec1(5,12);
    vector<char> vec2(5,'a');
    vector<int> vec3(vec1);
    for(int i=0;i<5;i++)
    {
        cout<<vec3[i]<<" ";
    }
    return 0;
}

 

vector迭代器

对同一类型

#include<iostream>
#include<string>
#include<vector> 
using namespace std;
int main()
{
    vector<int> vec2(5,11);
    vector<int> vec3(5,1);
    vector<int>::iterator ite=vec2.begin();//头迭代器 
    vector<int>::iterator ite1=vec2.end();//尾迭代器 
    vector<int> vec1(ite,ite1);
    for(int i=0;i<5;i++)
    {
        cout<<vec1[i]<<" ";
    }
    return 0;
}

 

vector容量

定义多少就是多少

容量不够时系统会自动增加容量

#include<iostream>
#include<string>
#include<vector> 
using namespace std;
int main()
{
    vector<int> vec(4);//定义容量为5 
    cout<<vec.capacity()<<endl;//输出容器容量 
    vec.push_back(1);//增加一个元素 ,导致容量不够,系统自动增加容量 
    cout<<vec.capacity()<<endl;//4+4 
    return 0;
}

 

reserve()修改vector容量大小

#include<iostream>
#include<string>
#include<vector> 
using namespace std;
int main()
{
    vector<int> vec(4);//定义容量为5 
    cout<<vec.capacity()<<endl;//输出容器容量 
    vec.reserve(8);
    cout<<vec.capacity()<<endl;
    return 0;
}

size() 元素个数

resize() 重新定义元素个数

empty()

#include<iostream>
#include<string>
#include<vector> 
using namespace std;
int main()
{
    vector<int> vec(4); 
    vec.resize(5);//重新定义元素个数 
    cout<<vec.size()<<endl;//元素个数 
    cout<<vec.empty()<<endl;//vec空返回1,有元素返回0 
    return 0;
}

 

vector输出

下标运算 vec[],at函数 vec.at()

返回尾元素 back()

返回头元素 begin()

for_each(vec.begin(),vec.end(),函数)

增加元素

尾添加

push_back()

中间添加

vec.insert(vec.begin()+2,12) //下标为2的位置插入

vec.insert(vec.begin()+2,num,12) //下标为2的位置插入numge

vec.insert(vec.begin()+2,vec1.begin(),vec.end()) //下标为2的位置插入vec1的元素

 

删除元素

尾删除

pop_back()

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
void f(int a)
{
    cout<<a<<endl;
}
int main()
{
    vector<int> vec; 
    for(int i=0;i<4;i++)
    {
        vec.push_back(i);
    }
    vec.pop_back();
    for_each(vec.begin(),vec.end(),f);
    return 0;
}

 

中间删除

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
void f(int a)
{
    cout<<a<<endl;
}
int main()
{
    vector<int> vec; 
    for(int i=0;i<4;i++)
    {
        vec.push_back(i);
    }
    vec.erase(vec.begin()+1);//删除下标为1的字符 
    for_each(vec.begin(),vec.end(),f);
    vec.erase(vec.begin()+1,vec.end());//删除下标尾1后的所有字符 
    for_each(vec.begin(),vec.end(),f);
    return 0;
}

修改

利用输出形式修改

eg:迭代器

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
void f(int a)
{
    cout<<a<<endl;
}
int main()
{
    vector<int> vec; 
    for(int i=0;i<4;i++)
    {
        vec.push_back(i);
    }
    vector<int>::iterator ite=vec.begin();
    for(ite;ite!=vec.end();ite++)
    {
        *ite=9;
    } 
    for_each(vec.begin(),vec.end(),f);
    return 0;
}

 

交换

swap()

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
void f(int a)
{
    cout<<a<<endl;
}
int main()
{
    vector<int> vec1;
    vector<int> vec2(4,7);
    for(int i=0;i<4;i++)
    {
        vec1.push_back(i);
    }
    vec1.swap(vec2);
    for_each(vec1.begin(),vec1.end(),f);
    for_each(vec2.begin(),vec2.end(),f);
    return 0;
}

 

运算符重载

比较两个vector数组大小。真就返回1,假就返回2

比较规则:数组对应下标中的值

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
/*void f(int a)
{
    cout<<a<<endl;
}*/
int main()
{
    vector<int> vec1;
    vector<int> vec2(4,7);
    for(int i=0;i<4;i++)
    {
        vec1.push_back(i);
    }
    cout<<(vec1<vec2)<<endl;
    /*vec1.swap(vec2);
    for_each(vec1.begin(),vec1.end(),f);
    for_each(vec2.begin(),vec2.end(),f);*/
    return 0;
}

排序 sort()

头文件 <algorithm>

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
void f(int a)
{
    cout<<a<<endl;
}
int main()
{
    vector<int> vec1;
    vec1.push_back(20);
    vec1.push_back(46);
    vec1.push_back(48);
    vec1.push_back(12);
    vec1.push_back(45);
    sort(vec1.begin(),vec1.end());
    for_each(vec1.begin(),vec1.end(),f);
    return 0;
}

从大到小

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
void f(int a)
{
    cout<<a<<endl;
}
int cmp(int x,int y)
{
    return x>y;
}
int main()
{
    vector<int> vec1;
    vec1.push_back(20);
    vec1.push_back(46);
    vec1.push_back(48);
    vec1.push_back(12);
    vec1.push_back(45);
    sort(vec1.begin(),vec1.end(),cmp);
    for_each(vec1.begin(),vec1.end(),f);
    return 0;
}

greater<>() 从大到小

头文件 <functional>

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
void f(int a)
{
    cout<<a<<endl;
}
/*int cmp(int x,int y)
{
    return x>y;
}*/
int main()
{
    vector<int> vec1;
    vec1.push_back(20);
    vec1.push_back(46);
    vec1.push_back(48);
    vec1.push_back(12);
    vec1.push_back(45);
    sort(vec1.begin(),vec1.end(),greater<int>());
    for_each(vec1.begin(),vec1.end(),f);
    return 0;
}

 

posted on 2021-01-18 16:42  skfjh  阅读(63)  评论(0)    收藏  举报

导航