C++Container之vector用法

C++Container之vector用法

标准库类型vector表示类型相同的对象的集合。该对象包括 除引用外 大多数内置类型和类类型,甚至组成vector的元素也可以是vector
  • 头文件
    #include<vector>
    using std::vector;

  • 定义和初始化
    vector<int> ivec; //ivec保存int类型的对象
    vector<item_class> item_vec; //保存自定义类类型的对象
    vector<vector<string>> file; //该向量的元素是vector对象

    vector<string> svec(ivec) //错误:对象类型不同,不能赋值

初始化方法含义
vector<T> v1v1是一个空的vector,潜在的元素是T类型的
vector<T> v2(v1)v2中包含有v1所有元素的副本
vector<T> v2 = v1等价于v2(v1)
vector<T> v3(n, val)v3包含了n个重复的元素,每个元素的值都是val
vector<T> v4(n)v4包含了每个重复的执行了值初始化的对象
vector<T> v5{a,b,c,...}v5包含了初始值个数的元素,并被赋予初始值
vector<T> v5={a,b,c,}等价于v5(a,b,c,…)

vector<int> v1(10); //v1有10个元素,每个值都是0
vector<int> v2{10;}; //v2有1个元素,值是10
vector<int> v3(10,1); //v3有10个元素,每个值都是1
vector<int> v4{10,1}; //v4有2个元素,值分别是10,1
vector<int> v5("hi"); //错误:不能使用字符串字面值构建vector
vector<int> v6{"hi"}; //列表初始化,v6有一个元素
vector<int> v7{10}; //v7有10个默认初始化的元素
vector<int> v8{10,"hi"}; //v8有10个值为hi的元素

  • 向vector对象中添加元素
ivec.push_back(a);   //向对象ivec中添加元素a
  • 其他vector操作
v.empty()   //判断是否包含元素,即为空
v.size      //返回v中元素的个数
v.clear()   //清空对象中所有元素
v[n]        //返回v中第n个位置上元素的引用
  • 使用迭代器访问元素
vector<int>::iterator it;               //创建迭代器对象it
for(it=vec.begin();it!=vec.end();it++)  //遍历vector
    cout<<*it<<endl;                    //输出vector中的每个元素
  • 插入元素
vec.insert(vec.begin()+i,a);            //在第i+1个元素前面插入a;
  • 删除元素
vec.erase(vec.begin()+2);               //删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);   //删除区间[i,j-1];区间从0开始

一个算法

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int> vec1, vec2;
        if(array.size()>0){
            for(int i = 0; i<array.size(); i++){
                if(array[i]%2 == 1){
                    vec1.push_back(array[i]);               
                }else{
                    vec2.push_back(array[i]);
                }
            }
            array.clear();
            for(int j = 0; j < vec1.size(); j++){
                array.push_back(vec1[j]);
            }
            for(int k= 0; k < vec2.size(); k++){
                array.push_back(vec2[k]);
            }            
        }
    }
};
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值