【C++】vector的使用(上)

简介: 【C++】vector的使用(上)

5229cf7042780c39066a2776e95a4d88.png在之前我们学习了string的使用与模拟实现,在参考文档中可以发现,vector和string以及其他的容器的接口基本都相同,所以这里也就简要的介绍一下。

同样的,在这里还是要说一下,对于STL库的学习,不可能在一朝一夕之间学完,要学会去查看文档和多练习vector参考文档


1. 主要结构


57863e5adeb01f2ab5deb8fbfc3b80c0.png

vector没有像string一样进行类型重定义typedef basic_string<char> string,所以在使用vector的时候要指定模板参数类型例如vector<int>


2. 构造函数与复制重载


04cc6d8330576fad6ccb9867b2cb74bd.png

可以看到vector的构造函数实现相较于string就简化了很多,一共分为四个,分别是默认构造,指定长度和值的构造,迭代器区间构造,拷贝构造

void Test_Construct()
{
  vector<int> v1;//默认构造
  vector<int> v2(10, 3);//指定长度和值的构造
  string s("aaaaaaaaaaaaaa");
  vector<char> v3(s.begin(), s.end());//迭代器区间构造
  vector<char> v4(v3);//拷贝构造
}


813baa4cdef1e4e2389b0639738202fb.png

通过监视查看四个对象的值如上。


3. 迭代器


由于vector也是通过动态数组实现的,所以原生指针就能很好的支持迭代器行为,所以在vector中的迭代器本质也是指针。

83ba2c8a73d526cd1bdf42fcc6f2212f.png

可以看到和string一样,vector的迭代器也分为普通迭代器,反向迭代器,const迭代器,const反向迭代器。

8af9c36d5cb96ad3a85ccab4456b5c38.png

对于迭代器和反向迭代器的工作方式如上图。


4. 容量相关


1.容量读取

1. size

dca4952fcca3a86826f26d3cd3dbc7f8.png

返回一个size_t类型的vector中数据个数


2. capacity

a42c06e2d6d9ca33336d23423ea3f4ca.png

返回一个size_t类型的vector的容量。

使用范例:

void Test_Capacity()
{
  vector<int> v;
  v.reserve(10);
  for (size_t i = 0; i < 5; ++i)
  {
    v.push_back(i);
  }
  cout << "size:" << v.size() << endl;
  cout << "capacity:" << v.capacity() << endl;
}


运行结果为:

08c466b53aff4e19e516b8498ad2e6d5.png

2.容量修改

1. reserve

9f0cb5141c509db22d18d2da90fcb070.png

扩大vector的容量到n,如果原来vector的容量大于等于n,不做任何操作

void Test_Capacity2()
{
  vector<int> v(5, 1);
  cout << "before reserve capacity:" << v.capacity() << endl;
  v.reserve(10);
  cout << "after reserve capacity:" << v.capacity() << endl;
}


5229cf7042780c39066a2776e95a4d88.png

2. resize

a3264fd7a1c4765fb82bb00e20d9b801.png

修改vector中的数据个数,如果n小于size,那就修改size;如果n大于size但是小于capacity,那就尾插数据直到size==n,如果n大于capacity,那就先扩容到n,再填充数据。

void Test_Capacity3()
{
  vector<int> v(5, 1);
  cout << "before resize capacity:" << v.size() << endl;
  v.resize(10);
  cout << "after resize capacity:" << v.size() << endl;
  for (auto e : v)
  {
    cout << e << " ";
  }
  cout << endl;
}


fc6a519a55243fc39da9275bdb813335.png

相关文章
|
21天前
|
C++
c++的学习之路:13、vector(2)
c++的学习之路:13、vector(2)
26 0
|
7天前
|
C语言 C++ 容器
从C语言到C++_15(vector的模拟实现)+迭代器失效问题(下)
从C语言到C++_15(vector的模拟实现)+迭代器失效问题
20 0
|
7天前
|
算法 测试技术 C语言
从C语言到C++_15(vector的模拟实现)+迭代器失效问题(中)
从C语言到C++_15(vector的模拟实现)+迭代器失效问题
31 0
|
7天前
|
区块链 C语言 C++
从C语言到C++_15(vector的模拟实现)+迭代器失效问题(上)
从C语言到C++_15(vector的模拟实现)+迭代器失效问题
18 0
|
7天前
|
存储 算法 C语言
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)(下)
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
15 0
|
7天前
|
算法 C语言 C++
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)(中)
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
14 1
|
7天前
|
存储 C语言 C++
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)(上)
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
15 0
|
12天前
|
C++ 容器
黑马c++ STL部分 笔记(3) vector容器
黑马c++ STL部分 笔记(3) vector容器
|
12天前
|
C++ 容器
黑马c++ STL部分 笔记(1) vector容器
黑马c++ STL部分 笔记(1) vector容器
|
14天前
|
C++ 容器
【C++】Vector -- 详解(下)
【C++】Vector -- 详解(下)