[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 }
posted @ 2017-01-25 18:32  Strawberry丶  阅读(478)  评论(0编辑  收藏  举报