C++ STL之vector

vector是表示可变大小数组的序列容器。本质上,vector使用动态分配数组来存储它的元素。

1.头文件

#include<vector>

2.vector声明及初始化

vector<int> vec;        //声明一个int型向量
vector<int> vec(5);     //声明一个初始大小为5的int向量
vector<int> vec(10, 1); //声明一个初始大小为10且值都是1的向量
vector<int> vec(tmp);   //声明并用tmp向量初始化vec向量
vector<int> tmp(vec.begin(), vec.begin() + 3);  //用向量vec的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};   
vector<int> vec(arr, arr + 5);      //将arr数组的元素用于初始化vec向量
//说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
//这个主要是为了和vec.end()指针统一。
vector<int> vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
vector<pair<int ,char>> p;
vector<pair<char,int>> p(mp.begin(),mp.end());//mp是map<char,int> 类型;

3.vector基本操作

向量大小: vec.size();
向量判空: vec.empty();
末尾添加元素: vec.push_back();
末尾删除元素: vec.pop_back();
插入元素: v.insert(p,val);//在迭代器p前面插入新元素val
注意:vector没有push_front,list和deque则有
在迭代器p指向元素之前插入一个值为t的元素: vec.insert(p,t);
删除迭代器p指定元素: vec.erase(p);
交换两个向量的元素: vec.swap();
访问第一个元素: vec.front();
访问最后一个元素: vec.back();
pair添加元素:p.push_back(make_pair(10,'a'));
拷贝:
vector<int> v1(v2); //法1:初始化构造时拷贝,注意不能是vector<int> v1=v2
v1.assign(v2.begin(), v2.end()); // 法2

4.vector算法

4.1 vector 自定义排序

#include<algorithm>
sort(res.begin(), res.end(),comp);
#include<algorithm>
class Solution {
public:
	vector<vector<int> > subsets(vector<int> &S) {
		vector<vector<int> > res;
		if (S.empty()) return res;
		int n;
		vector<int> v;
		res.push_back(v);
		sort(S.begin(), S.end());
		for (int i = 0; i<S.size(); i++){
			n = res.size();
			for (int j = 0; j<n; j++){
				v = res[j];
				v.push_back(S[i]);
				res.push_back(v);
			}
		}
		sort(res.begin(), res.end(),comp);
		return res;
	}
    static bool comp(const vector<int>& a1,const vector<int>& a2)
    {
        if(a1.size() < a2.size())
            return true;
        else if(a1.size() == a2.size())
            return a1 < a2;
        else
            return false;
    }
};

pair排序

bool judge(const pair<int,char> a, const pair<int ,char> b) {
    return a.first<b.first;
}
int main()
{
    vector<pair<int ,char>> p;
    p.push_back(make_pair(10,'a'));
    p.push_back(make_pair(9,'c'));
    p.push_back(make_pair(10,'t'));
    p.push_back(make_pair(17,'y'));
    p.push_back(make_pair(10,'b'));
    sort(p.begin(),p.end(),judge);
    for(auto i=0;i<p.size();i++)
        cout<<p[i].first<<"    "<<p[i].second<<endl;
    system("pause");
}

4.2 vector翻转

#include<algorithm>
reverse(vec.begin(),vec.end());

4.3 vector的遍历方法

标准法

    int count = valList.size();
    for (int i = 0; i < count;i++)
    {
        cout << valList[i] << endl;
    }

for区间遍历

for (auto val : valList)
{
    cout << val << endl;
}

4.4 vector去重

先用sort()排序,然后利用unique()函数将重复的元素放到vector的尾部,然后返回指向第一个重复元素的迭代器,再用erase函数擦除从这个元素到最后元素的所有的元素

 sort(res.begin(),res.end());
 res.erase(unique(res.begin(), res.end()), res.end());

参考教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值