• [STL] vector基本用法


    vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块的array。

    vector动态增加大小,并不是在原空间之后持续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。
     1 #include <iostream>
     2 #include <vector>
     3 #include <string>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 int main()
     8 {
     9     string str[] = {"Alex", "John", "Robert"};
    10     //创建一个空vector容器
    11     vector<int> v1;
    12     //创建一个有10个空元素的vector容器
    13     vector<int> v2(10);
    14     //创建一个有10个元素的vector容器,并为每个元素赋值为0
    15     vector<int> v3(10,0);
    16     //根据字符串数组创建vector容器
    17     vector<string> v4(str,str + 3);
    18 
    19     //迭代器法遍历
    20     vector<string>::iterator sIt = v4.begin();
    21     while(sIt != v4.end()){
    22         cout<< *sIt ++ << " ";
    23     }
    24     cout<<endl;
    25 
    26     //拷贝构造
    27     vector<string> v5(v4);
    28     //下标法遍历
    29     for(int i = 0;i < 3;i ++){
    30         cout<< v5[i] << " ";
    31     }
    32     cout<<endl;
    33 
    34     return 0;
    35 }

     

    vector创建二维数组:

     1 #include   <iostream>
     2 #include   <vector>
     3 using   namespace   std;
     4 int  main()
     5 {
     6     vector < vector <int> >   array(3);
     7     for(int i=0; i <3; i++)
     8         array[i].resize(3);//设置数组的大小3X3
     9     //现在可以和使用数组一样使用这个vector
    10     for(int i=0; i <3; i++)
    11         for(int j=0; j <3; j++)
    12             array[i][j]=(i*j);
    13     //输出
    14     for(int i=0; i <3; i++)
    15     {
    16         for(int j=0; j <3; j++)
    17             cout << array[i][j] << "  ";
    18         cout << endl;
    19     }
    20     cout<<"After resizing:"<<endl;
    21     // 添加两行,对列也要重新设置大小
    22     array.resize(5);
    23     array[3].resize(3);
    24     array[4].resize(3);
    25     //现在是5X3的数组了
    26     for(int i=0; i <5; i++)
    27         for(int j=0; j <3; j++)
    28             array[i][j]=(i*j);
    29     for(int i=0; i <5; i++)
    30     {
    31         for(int j=0; j <3; j++)
    32             cout << array[i][j] << "  ";
    33         cout << endl;
    34     }
    35     return 0;
    36 }

    二维数组去除重复行:

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

    二维数组迭代输出:

     1 vector<vector<int>>::iterator IE;
     2 
     3 vector<int>::iterator it;
     4 for(IE=array.begin();IE<array.end();IE++)
     5 {
     6     for (it=(*IE).begin();it<(*IE).end();it++)
     7     {
     8         cout<<*it<<" ";
     9     }
    10     cout<<endl;
    11 }
  • 相关阅读:
    字符编码笔记:ASCII,Unicode和UTF8(转)
    如何让vs2005的网站编译成一个DLL
    全力奔跑
    工作心得之再谈“表现”
    IT外企那点事[转载]
    直面奋斗
    C#图片水印代码整理
    常用js代码
    一个很有趣的程序员等级考试题求循环小数
    String.Format(字符串输出格式)
  • 原文地址:https://www.cnblogs.com/lca1826/p/6349886.html
Copyright © 2020-2023  润新知