vector(一)

简介: vector

vector的介绍及使用


vector的介绍


vector是表示可变大小数组的序列容器

vector采用连续存储空间来存储元素,类似数组,但本质上vector使用动态分配数组来存储元素

vector的使用


定义


image.png


先介绍两个类型


size_type 本质上就是size_t类型


a6250382e282bffd89605e2652cba77a_578b1408299e41df84a1ab78b9f50ae5.png


const value_type& val的类型取决于参数T的类型


226b3ecfc0ffce0b4af32776398c1372_15f860ac1f4c4a10921d5e17bcf3b0d4.png


使用无参构造函数


void test()
{
  vector<int>v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  for (auto e : v)
  {
  cout << e << " ";
  }
  cout << endl;
}

310802508379a7d81103228fb05bbbb6_4cd842c417004f0bad17e35b290ee73b.png


vector iterator的使用


image.png


图形展示迭代器中的begin和end

149b26f714cebeb81911abc6727f92f0_5d538e9ea34e48ff9aab2ebf9c740400.png


使用


void test()
{
  vector<int>v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  vector<int>::iterator it = v.begin();
  while (it != v.end())
  {
  cout << *it << " ";
  it++;
  }
  cout << endl;
}


空间增长问题


容量空间 接口说明
size 获取数据个数
capacity 获取容量大小
empty 判断是否为空
resize 改变vector的size
reserve 改变vector的capacity


先介绍 vector扩容机制


void testvectorexpend()
{
  size_t sz;
  vector<int>v;
  sz = v.capacity();
  cout << "making v grow:";
  for (int i = 0; i < 100; i++)
  {
  v.push_back(i);
  if (sz != v.capacity())
  {
    sz = v.capacity();
    cout << "capacity changed" << sz << endl;
  }
  }
}


fd98fb4556be4a54ea65d6463e1ecf50_a9d72b0bd0414553b1af1dc39a5cbce7.png

通过运行结果可以得到扩容的大小大概是1.5倍,与string类似,当容量不够使用时,编译器会自动进行扩容来适配所需要的大小


reserve函数

功能:提前预留空间以供使用,如果预留的空间比原有容量小时,会不会进行缩容操作呢?


void test()
{
  vector<int>v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  cout << v.capacity() << endl;
  v.reserve(10);
  cout << v.capacity() << endl;
  v.reserve(3);
  cout << v.capacity() << endl;
}


e7d748d0818604497fd95e4495dda0af_04a54661d9394f7788817d3566a94b6d.png


由运行结果可知:当预留空间比当前容量小时,不会进行缩容操作

resize函数在此情境下同样不会进行缩容操作


增删查改


vector增删查改 接口说明
push_back 尾插
push_pop 尾删
find 查找
insert 在pos之前插入val
erase 删除pos位置的数据
swap 交换两个vector的数据空间
operator[] 类似数组访问



增: push_back,一般不进行头插(效率低);偶尔进行头插insert(iterator begin(),val)


insert函数,插入数据同样借助迭代器


65572a31a67e2cb5b2bef34fe9ea8436_251ec196e378444aa4ee466ac9389e37.png


void test()
{
  vector<int>v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  for (auto e : v)
  {
  cout << e << " ";
  }
  cout << endl;
  v.insert(v.begin(), 0);
  v.insert(v.begin() + 5, 5);
  for (auto e : v)
  {
  cout << e << " ";
  }
  cout << endl;
}


d06e0986cca0fb7d29fd96d56039aad3_025af0cfc6a54b29bdf146b73d4c5804.png


删: pop_back,一般不进行头删(效率低);偶尔进行头删 erase(iterator begin())


void test()
{
  vector<int>v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  vector<int>::iterator it = v.begin();
  while (it != v.end())
  {
  cout << *it << " ";
  it++;
  }
  cout << endl;
  v.pop_back();
  it = v.begin();
  while (it != v.end())
  {
  cout << *it << " ";
  it++;
  }
  cout << endl;
}


1fc8c9bc94a6e3046f3c769478cbcff0_b56ec9f2d3784b858c94ddae5f2eefce.png


查:算法库 find


类模板算法–复用,所有容器均可使用

也是由迭代器实现的


d5dcc86c07747c79b5cb5bb260ac950c_f8c61d5dda06478c9cbe2d620d01cb40.png


在 vector中查找数字3,若找到在其其前面插入数字30;若没有找到则不做任何操作


void test()
{
  vector<int>v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  for (auto e : v)
  {
  cout << e << " ";
  }
  cout << endl;
  vector<int>::iterator it = find(v.begin(), v.end(), 3);
  if (it != v.end())
  {
  v.insert(it, 30);
  }
  for (auto e : v)
  {
  cout << e << " ";
  }
  cout << endl;
}

a2fef419711dc8e547f1c37211f5a570_fada463d83404bf19967ce95d929669d.png


改:一般配合迭代器使用


``


目录
相关文章
|
5月前
|
存储 算法 测试技术
C++:Vector的使用
C++:Vector的使用
|
5月前
|
存储 编译器 C语言
vector讲解
vector讲解
57 0
|
5月前
|
编译器 C++
【c++】vector
【c++】vector
39 0
|
2月前
|
安全 Java
Vector的使用
Vector的使用
15 2
|
3月前
|
存储 C语言 C++
【C++】vector的使用上
**C++ STL的vector简介与用法:** Vector是动态顺序数组,提供高效下标访问,支持动态增长。与数组类似但可自动调整大小。常用构造函数包括默认、填充、迭代器范围和拷贝构造。析构函数自动释放内存。赋值运算符执行深拷贝。迭代器接口包括`begin()`和`end()`(反向对应`rbegin()`和`rend()`),C++11增加了const版本以支持只读访问。示例代码展示了不同构造函数和迭代器的使用。
|
3月前
|
编译器 C++
【C++】vector的使用下
**C++ 中的 `std::vector` 概要:** - **元素获取:** 支持 `operator[]`(越界时不检
|
4月前
|
存储 索引 容器
vector
【6月更文挑战第17天】
41 0
|
5月前
|
算法 编译器 C++
(C++)vector介绍及其使用
(C++)vector介绍及其使用
56 0
|
10月前
|
编译器 C++
c++ vector的使用
vector 的初始化
51 0
|
12月前
|
设计模式 编译器 C++
【C++】vector的使用(下)
【C++】vector的使用(下)