您的位置:首页 > 其它

[STL] vector基本用法

2017-11-20 11:19 441 查看
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 &
4000
lt;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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: