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> v1 | v1是一个空的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]);
}
}
}
};