• [c++] <vector>


    特性

    • vector:可变长度动态数组,是一种顺序容器,支持随机访问迭代器,以及所有STL算法
    • 可在常数时间访问元素,在中间插入元素,删除元素较慢
    • 不断添加元素超过默认大小时,会重新分配内存,复制原有的元素并添加新元素

    函数

    • vector():无参构造函数,将容器初始化为空
    • vector( int n ):初始化为有n个元素
    • vector( int n, const T & val ):初始化为有n个T类型元素,每个元素初始值都为val
    • vector(iterator first, iterator last ):初始化为与其他容器区间 [ first, last ) 的内容一致
    • void clear():删除所有元素
    • bool empty():判断容器是否为空
    • void push_back( const T & val ):在末尾添加元素
    • int size():返回元素个数
    • T & front():返回第一个元素的引用
    • T & back():返回最后一个元素的引用
    • iterator insert( iterator i, const T & val ):将val插入迭代器 i 指向的位置,返回 i
    • iterator insert( iterator i, iterator first, iterator last ):将其他容器区间[ first, last ) 中的元素插入迭代器 i 指向的位置
    • iterator erase(iterator i):删除迭代器 i 指向的元素,返回被删元素后面元素的迭代器
    • void swap( vector <T> & v ):将容器自身内容和另一个同类型容器v互换
    • pop_back():删除最后一个元素

    示例

    初始化、元素处理

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 
     5 int main(){
     6 vector<int> v{1,2,3,4,5};
     7 for(auto &i:v)
     8     i*=i;
     9 for(auto i:v)
    10     cout<<i<<" ";
    11 cout<<endl;
    12 }

    统计区间内元素数量

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 
     5 int main(){
     6 vector<unsigned> scores(11,0);
     7 unsigned grade;
     8 while(cin >> grade){
     9     if(grade <= 100)
    10         ++scores[grade/10];
    11 }
    12 for(auto i:scores)
    13     cout<<i<<" ";
    14 cout<<endl;
    15 }

    不得通过下标访问不存在的元素(错误写法)

    1 int main(){
    2 vector<int> v;
    3 cout << v[0];
    4 }

    将首字母改为大写(通过迭代器访问元素)

     1 #include <iostream>
     2 #include <vector>
     3 #include <string>
     4 using namespace std;
     5 
     6 int main(){
     7 string s("some thing");
     8 if(s.begin() != s.end()){
     9     auto it = s.begin();
    10     *it = toupper(*it);
    11 }
    12 cout<<s<<endl;
    13 }

    将第一个单词改为大写

     1 #include <iostream>
     2 #include <vector>
     3 #include <string>
     4 using namespace std;
     5 
     6 int main(){
     7 string s = "some thing";
     8 for(auto it = s.begin(); it != s.end() && !isspace(*it); ++it)
     9     *it = toupper(*it);
    10 cout << s << endl;
    11 }

    创建Vector对象,并把0~99的值赋给它

     1 #include<iostream>
     2 #include<vector>
     3 using std::vector;
     4 int main() {
     5     vector<int> v2;
     6     for (int i = 0; i != 100; ++i)
     7         v2.push_back(i);
     8     printf("%d
    ", v2[9]);
     9     return 0;
    10 }

    将数组复制到vector

     1 #include<vector>
     2 #include<iostream>
     3 using namespace std;
     4 
     5 int main(){
     6     vector<int> w;
     7     int a[3] = {1,2,3}; 
     8     w = vector<int>(a,a+3);
     9     // 也可以这样写: 
    10     // vector<int> w(a,a+3);
    11     for(auto i:w)
    12         cout<<i<<" ";
    13     cout<<endl;
    14 }

    二维vector数组

     1 #include <vector>
     2 #include <iostream>
     3 using namespace std;
     4 
     5 int main(){
     6     vector<vector<int>> vec;
     7     vector<int> m_vec;
     8     m_vec.push_back(100);
     9     m_vec.push_back(200);
    10     vec.push_back(m_vec);
    11     cout<<vec[0][1]<<endl;
    12     
    13     pair<int,int> p;
    14     p = make_pair(300,400);
    15     cout << p.first << " " << p.second << endl;
    16     
    17     vector<pair<int,int>> p_vec;
    18     p_vec.push_back(make_pair(500,600));
    19     cout << p_vec[0].first << " " << p_vec[0].second << endl;
    20 }

    参考

    vector中存对象还是存指针

    https://blog.csdn.net/qq_21441793/article/details/80321467

    https://blog.csdn.net/zhongkeli/article/details/6980477

    C++:将数组赋值给vector简单方法

    https://blog.csdn.net/qq_22532597/article/details/80904664?

    pop_back()

    http://www.cplusplus.com/reference/vector/vector/pop_back/

  • 相关阅读:
    给任意多个链表然后要合并成一个
    hdu5967数学找规律+逆元
    poj2125最小点权覆盖+找一个割集
    poj3308 最小点权覆盖
    poj2987 最大闭合权子图基础题
    poj2699 转化为可行性判定问题+二分枚举+最大流
    判断割是否唯一zoj2587
    快排优化
    jvm垃圾收集器
    三次握手与四次挥手
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12194276.html
Copyright © 2020-2023  润新知