STL常用操作:vector

1.初始化

vector<int> vec1;    //默认初始化,vec1为空
vector<int> vec2(vec1);  //使用vec1初始化vec2
vector<int> vec3(vec1.begin(), vec1.end());//使用vec1初始化vec2
vector<int> vec4(10);    //10个值为0的元素
vector<int> vec5(10, 4);  //10个值为4的元素
int arr[7]={1,2,3,4,5,9,8}; vector<int> vec6(arr,arr+7); //从数组中获得初值
vector<int> vec7 = {1,5,4,6};
vector<int> vec8{1,5,4,6};    //使用initializer_list初始化

2.常用操作

vec1.push_back(100);           //尾部添加元素
vec1.emplace(vec1.begin()+1, 5);    //在第一个元素之后插入5
vec1.emplace_back(100);        //尾部添加元素
vec1.pop_back();              //删除末尾元素,但是并没有返回值
vec1.back();        //返回末尾元素
vec1.front();        //返回第一个元素
vec1.size();         //元素个数
vec1.empty();    //判断是否为空
vec1[0];        //取得第一个元素
vec1.at(0);        //取得第一个元素,并且会进行越界检查
vec1.insert(vec1.begin()+1,5);    //在第一个元素之后插入数值5
vec1.insert(vec1.end(),5,3);    //从vec1.back位置插入5个值为3的元素
vec1.insert(vec.begin()+1,arr+3,arr+6);    //在第一个元素之后插入数组arr[3]到arr[5]
vec1.erase(vec1.begin());    //删除第一个元素
vec1.erase(vec1.begin(),vec1.begin()+2);//删除vec1[0, 2)之间的元素
vec1.resize(10);        //将vec1的元素变成10个,多则删,少则补,值为0
vec1.resize(10,2);        //将vec1的元素变成10个,多则删,少则补,值为2
vec1==vec2;  //判断是否相等==、!=、>=、<=...
vector<int>::iterator it=vec1.begin();    //获取迭代器首地址
vector<int>::const_iterator c_it=vec1.cbegin();   //获取const类型迭代器
vector<int>::reverse_iterator r_it=vec1.rbegin();    //获取逆序后vector迭代器首地址
vector<int>::const_reverse_iterator cr_it=vec1.crbegin();   //获取const类型迭代器
vec1.clear();              //清空元素

3.不常用操作

vec1.assign(vec2.begin(), vec2.begin()+3);    //将vec2从第一个元素到第3个元素的值赋给vec1,会清除vec1之前的内容
vec1.assign(4,2);        //初始化vec1为4个2
vec1.capacity();        //vec1的容量
vec1.reserve(100);        //将vec1的容量(capacity)扩充至100
vec1.swap(vec2);        //将vec1中的元素和vec2中的元素进行交换
vec1.shrink_to_fit();      //通过释放未使用的内存减少内存的使用
vec1.data();        //返回数组第一个元素的指针 

ifstream if("data.txt");    //从文件中读取值到vec1中
vector<int> vec1;
for(int i; if >> i)    vec.push_back(i);

vec1.max_size();     //返回vector最大可以有多少个元素
allocator<int> alloc = vec1.get_allocator();    //返回vector的内存分配器
vector<vector<int>> matrix(2,vector<int>(5));//初始化2行5列的二维数组,初值值为0

4.遍历

  • 下标法
for(int i = 0; i < vec.size(); i++) {
    cout << vec[i];
}
  • 迭代器
for(vector<int>::iterator it = vec1.begin(); it != vec.end(); it++) {
    cout << *it;
}
  • C11
for(auto i : vec) {
    cout << i;
}
  • for_each
for_each(vec.begin(), vec.end(), [](int x) {cout << x << " ";});

 5.算法

sort(vec.begin(),vec.end());     //从小到大排列
reverse(vec.begin(),vec.end()); //元素倒置
copy(vec1.begin(),vec1.end(),vec2.begin()+1);//把vec1的所有元素复制到vec2中,替换vec2原位置的元素,vec2要有足够的空间
find(vec.begin(),vec.end(),10); //在vec查找10,若存在返回位置,不存在返回end()
distance(vec.begin(), vec.end()); //返回之间的距离,不包括end位置
发布了36 篇原创文章 · 获赞 6 · 访问量 6991

猜你喜欢

转载自blog.csdn.net/zhuikefeng/article/details/104682905