【C++ STL】 --- vector

简介: 【C++ STL】 --- vector

1、vector基本概念

(1)功能:

vector数据结构和数组非常相似,也称为单端数组

(2)vector与普通数组区别:

不同之处在于数组是静态空间,而vector可以动态扩展

(3)动态扩展:

并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间

(4)vector容器的迭代器是支持随机访问的迭代器

2、vector构造函数

功能描述:

创建vector容器

函数原型:

1. vector<T> v;                 //采用模板实现类实现,默认构造函数
2. vector(v.begin(), v.end());  //将v[begin(), end())区间中的元素拷贝给本身
3. vector(n, elem);             //构造函数将n个elem拷贝给本身
4. vector(const vector &vec);   //拷贝构造函数
1. void printVector(vector<int>& v) {
2. 
3.  for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
4.    cout << *it << " ";
5.  }
6.  cout << endl;
7. }
8. 
9. void test01()
10. {
11.   vector<int> v1; //无参构造
12.   for (int i = 0; i < 10; i++)
13.   {
14.     v1.push_back(i);
15.   }
16.   printVector(v1);
17. 
18.   vector<int> v2(v1.begin(), v1.end());
19.   printVector(v2);
20. 
21.   vector<int> v3(10, 100);
22.   printVector(v3);
23. 
24.   vector<int> v4(v3);
25.   printVector(v4);
26. }
27. 
28. int main() {
29. test01();
30.   return 0;
31. }

3、vector赋值操作

**功能描述:**

给vector容器进行赋值

函数原型:

1. vector& operator=(const vector &vec); //重载等号操作符
2. assign(beg, end);                     //将[beg, end)区间中的数据拷贝赋值给本身。
3. assign(n, elem);                      //将n个elem拷贝赋值给本身。
1. void printVector(vector<int>& v) {
2. 
3.  for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
4.    cout << *it << " ";
5.  }
6.  cout << endl;
7. }
8. 
9. //赋值操作
10. void test01()
11. {
12.   vector<int> v1; //无参构造
13.   for (int i = 0; i < 10; i++)
14.   {
15.     v1.push_back(i);
16.   }
17.   printVector(v1);
18. 
19.   vector<int>v2;
20.   v2 = v1;
21.   printVector(v2);
22. 
23.   vector<int>v3;
24.   v3.assign(v1.begin(), v1.end());
25.   printVector(v3);
26. 
27.   vector<int>v4;
28.   v4.assign(10, 100);
29.   printVector(v4);
30. }
31. 
32. int main() {
33.   test01();
34.   return 0;
35. }

总结: vector赋值方式比较简单,使用operator=,或者assign都可以

4、vectorvector容量和大小

功能描述:

对vector容器的容量和大小操作

函数原型:

1. empty();                 //判断容器是否为空
2. capacity();              //容器的容量
3. size();                  //返回容器中元素的个数
4. resize(int num);         //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。
5. //如果容器变短,则末尾超出容器长度的元素被删除。
6. resize(int num, elem);   //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。
7. //如果容器变短,则末尾超出容器长度的元素被删除
1. void printVector(vector<int>& v) {
2. 
3.  for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
4.    cout << *it << " ";
5.  }
6.  cout << endl;
7. }
8. 
9. void test01()
10. {
11.   vector<int> v1;
12.   for (int i = 0; i < 10; i++)
13.   {
14.     v1.push_back(i);
15.   }
16.   printVector(v1);
17.   if (v1.empty())
18.   {
19.     cout << "v1为空" << endl;
20.   }
21.   else
22.   {
23.     cout << "v1不为空" << endl;
24.     cout << "v1的容量 = " << v1.capacity() << endl;
25.     cout << "v1的大小 = " << v1.size() << endl;
26.   }
27. 
28.   //resize 重新指定大小 ,若指定的更大,默认用0填充新位置,可以利用重载版本替换默认填充
29.   v1.resize(15,10);
30.   printVector(v1);
31. 
32.   //resize 重新指定大小 ,若指定的更小,超出部分元素被删除
33.   v1.resize(5);
34.   printVector(v1);
35. }
36. 
37. int main() 
38. {
39.   test01();
40.   return 0;
41. }

总结:

* 判断是否为空  --- empty

* 返回元素个数  --- size

* 返回容器容量  --- capacity

* 重新指定大小  ---  resize

5、vector插入和删除

功能描述:

对vector容器进行插入、删除操作

函数原型:

1. push_back(ele);                                  //尾部插入元素ele
2. pop_back();                                      //删除最后一个元素
3. insert(const_iterator pos, ele);                 //迭代器指向位置pos插入元素ele
4. insert(const_iterator pos, int count,ele);       //迭代器指向位置pos插入count个元素ele
5. erase(const_iterator pos);                       //删除迭代器指向的元素
6. erase(const_iterator start, const_iterator end); //删除迭代器从start到end之间的元素
7. clear();                                         //删除容器中所有元素
1. void printVector(vector<int>& v) {
2. 
3.  for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
4.    cout << *it << " ";
5.  }
6.  cout << endl;
7. }
8. 
9. //插入和删除
10. void test01()
11. {
12.   vector<int> v1;
13.   //尾插
14.   v1.push_back(10);
15.   v1.push_back(20);
16.   v1.push_back(30);
17.   v1.push_back(40);
18.   v1.push_back(50);
19.   printVector(v1);
20.   //尾删
21.   v1.pop_back();
22.   printVector(v1);
23.   //插入
24.   v1.insert(v1.begin(), 100);
25.   printVector(v1);
26. 
27.   v1.insert(v1.begin(), 2, 1000);
28.   printVector(v1);
29. 
30.   //删除
31.   v1.erase(v1.begin());
32.   printVector(v1);
33. 
34.   //清空
35.   v1.erase(v1.begin(), v1.end());
36.   v1.clear();
37.   printVector(v1);
38. }
39. 
40. int main() 
41. {
42.   test01();
43.   return 0;
44. }

总结:

尾插 --- push_back

尾删 --- pop_back

插入 --- insert (位置迭代器)

删除 --- erase (位置迭代器)

清空 --- clear

6、vector数据存取

vector数据存取

功能描述:

对vector中的数据的存取操作

函数原型:

1. at(int idx);     //返回索引idx所指的数据
2. operator[];      //返回索引idx所指的数据
3. front();         //返回容器中第一个数据元素
4. back();          //返回容器中最后一个数据元素
1. void test01()
2. {
3.  vector<int>v1;
4.  for (int i = 0; i < 10; i++)
5.  {
6.    v1.push_back(i);
7.  }
8. 
9.  for (int i = 0; i < v1.size(); i++)
10.   {
11.     cout << v1[i] << " ";
12.   }
13.   cout << endl;
14. 
15.   for (int i = 0; i < v1.size(); i++)
16.   {
17.     cout << v1.at(i) << " ";
18.   }
19.   cout << endl;
20. 
21.   cout << "v1的第一个元素为: " << v1.front() << endl;
22.   cout << "v1的最后一个元素为: " << v1.back() << endl;
23. }
24. 
25. int main() 
26. {
27.   test01();
28.   return 0;
29. }

总结:

除了用迭代器获取vector容器中元素,[ ]和at也可以

front返回容器第一个元素

back返回容器最后一个元素

7 vector互换容器

功能描述:

实现两个容器内元素进行互换

函数原型:

swap(vec);     // 将vec与本身的元素互换
1. void printVector(vector<int>& v) {
2. 
3.  for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
4.    cout << *it << " ";
5.  }
6.  cout << endl;
7. }
8. 
9. void test01()
10. {
11.   vector<int>v1;
12.   for (int i = 0; i < 10; i++)
13.   {
14.     v1.push_back(i);
15.   }
16.   printVector(v1);
17. 
18.   vector<int>v2;
19.   for (int i = 10; i > 0; i--)
20.   {
21.     v2.push_back(i);
22.   }
23.   printVector(v2);
24. 
25.   //互换容器
26.   cout << "互换后" << endl;
27.   v1.swap(v2);
28.   printVector(v1);
29.   printVector(v2);
30. }
31. 
32. void test02()
33. {
34.   vector<int> v;
35.   for (int i = 0; i < 100000; i++) {
36.     v.push_back(i);
37.   }
38. 
39.   cout << "v的容量为:" << v.capacity() << endl;
40.   cout << "v的大小为:" << v.size() << endl;
41. 
42.   v.resize(3);
43. 
44.   cout << "v的容量为:" << v.capacity() << endl;
45.   cout << "v的大小为:" << v.size() << endl;
46. 
47.   //收缩内存
48.   vector<int>(v).swap(v); //匿名对象
49. 
50.   cout << "v的容量为:" << v.capacity() << endl;
51.   cout << "v的大小为:" << v.size() << endl;
52. }
53. 
54. int main() {
55.   test01();
56.   test02();
57.   return 0;
58. }

总结:swap可以使两个容器互换,可以达到实用的收缩内存效果

相关文章
|
1月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
68 5
|
30天前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
20 1
|
1月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
52 1
|
1月前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
1月前
|
算法 安全 Linux
【C++STL简介】——我与C++的不解之缘(八)
【C++STL简介】——我与C++的不解之缘(八)
|
1月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
22 0
|
1月前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
26 0
|
1月前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
25 0
|
1月前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
1月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
21 0