第九层(3):STL之vector类(上)

简介: 第九层(3):STL之vector类(上)

前情回顾


上章中,我掌握了string类的使用,第二个石碑也倒下,但是后面还是一座石碑…


🚄上章地址:第九层(2):STL之string类


vrctor类


“看来后面还会有很多石碑,我明白那个人为什么说东西很多了,这一层的石碑比前面八层合起来石碑应该还要多…"


vrctor类的功能


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


vector与普通数组的区别


普通数组申请的是静态空间,而vector的空间可以动态扩展1


vector的迭代器


vector的迭代器是支持随机访问的迭代器

0a2653c851af460fa595bd959398a8f1.png



vector类内的构造函数


vector类内的构造函数可以用于创建一个vector的容器,也可以对其进行初始化的操作

vector<T> v;//采用模板实现,默认构造函数
vector(v.begin(),v.end());//将v.begin()到v.end()之间的元素拷贝给本身
vector(int n , T elem);//将n个elem拷贝给本身
vector(const vector &v);//将v的数据拷贝给本身


使用:


#include<vector>
#include<iostream>
using namespace std;
void print(vector<int>& v)
{
  for (vector<int>::iterator b=v.begin(); b < v.end(); b++)
  {
  cout << *b << " ";
  }
  cout << endl;
}
void test1()
{
  vector<int> v;
  for (int i = 0; i < 10; i++)
  {
  v.push_back(i);
  }
  print(v);
  vector<int> v1(v.begin(), v.end());
  print(v1);
  vector<int> v2(10, 0);
  print(v2);
  vector<int> v3(v2);
  print(v3);
}
int main()
{
  test1();
  return 0;
}

0a2653c851af460fa595bd959398a8f1.png


vector类内的赋值操作


vector类内的赋值,其实相当于拷贝的操作,类内提供了三种方法:

vector& operator=(const vector &v);//操作符重载,将v的数据拷贝到本身
assign(beg,end);//这里的beg和end是迭代器,这个函数可以将[beg,end)之间的数据拷贝到本身
assign(int n, T elem);//拷贝n个elem到本身


#include<vector>
#include<iostream>
using namespace std;
void print(vector<int>& v)
{
  for (vector<int>::iterator b=v.begin(); b < v.end(); b++)
  {
  cout << *b << " ";
  }
  cout << endl;
}
void test1()
{
  vector<int> v(10, 1);
  print(v);
  vector<int> v1 = v;
  print(v1);
  vector<int>v2(v1.begin(), v1.end());
  print(v2);
}
int main()
{
  test1();
  return 0;
}

0eacb84100b54626af849e6b562bf92a.png


vector类内对容器和大小操作


vector是一个类似于数组的东西,那它在某一个时间段的大小和容器容量可以去进行计算吗?可以,C++在vector类内封装了一些函数用于操作容器和

大小

empty();//判断容器是否为空,为空返回真
capacity();//返回容器当前容量
size();//返回容器中的元素个数
resize(int num);//可以重新指定容器的容量,容量为num,若容器变长,则变长的部分全部补0,若变短,则将超出的部分全部删除
reszie(int num,T elem);//可以重新指定容器的容量,容量为num,若容器变长,则变长的部分全部补elem,若变短,则将超出的部分全部删除


使用:


#include<vector>
#include<iostream>
using namespace std;
void print(vector<int>& v)
{
  for (vector<int>::iterator b=v.begin(); b < v.end(); b++)
  {
  cout << *b << " ";
  }
  cout << endl;
}
void test1()
{
  vector<int> v;
  if (v.empty())
  {
  cout << "为空" << endl;
  }
  for (int i = 0; i < 10; i++)
  {
  v.push_back(i);
  }
  print(v);
  cout << v.capacity() << endl;
  cout << v.size() << endl;
  v.resize(15);
  print(v);
  v.resize(20, 1);
  print(v);
}
int main()
{
  test1();
  return 0;
}

2d65d23f6d4748949b924e4057485923.png


vector类内的插入操作


vector类中于string类一样,同样拥有插入函数:

push_back(T ele);//从尾部插入元素ele
insert(const_iterator pos,T ele);//在迭代器pos指向位置插入元素ele
insert(const_iterator pos,int count,T ele);//在迭代器pos指向位置插入count个元素ele


使用:


#include<vector>
#include<iostream>
using namespace std;
void print(vector<int>& v)
{
  for (vector<int>::iterator b=v.begin(); b < v.end(); b++)
  {
  cout << *b << " ";
  }
  cout << endl;
}
void test1()
{
  vector<int> v;
  v.insert(v.begin(), 1);
  print(v);
  v.insert(v.begin(), 9, 2);
  print(v);
}
int main()
{
  test1();
  return 0;
}


2e9b90b2ca334476abebe75bafe6eeaa.png

2e9b90b2ca334476abebe75bafe6eeaa.png

相关文章
|
分布式计算 测试技术 API
为集成LLM到测试平台提供更便捷的方式:为讯飞的LLM星火创建接入LangChain类(全部源代码)
为集成LLM到测试平台提供更便捷的方式:为讯飞的LLM星火创建接入LangChain类(全部源代码)
661 0
|
4月前
|
API 运维
开发与运维数据问题之LangChain帮助处理长篇报告如何解决
开发与运维数据问题之LangChain帮助处理长篇报告如何解决
67 1
|
C语言 C++ 容器
STL容器篇之array与vector(学习篇)(上)
STL容器篇之array与vector(学习篇)
|
缓存 算法 C语言
【C++技能树】Vector类解析与模拟实现
Vector是一个动态数组的容器,可以容纳各种类型的序列容器。称其为数组,意味着:**其也可以用下标去访问,类似与之前的顺序表。**所以,Vector分配空间的时候也不是说用多少就分配多少,会多分配一些,因为向系统申请空间这个成本是相对较大的。
96 0
|
存储 C++ 容器
|
存储 容器
|
存储 编译器 C++
C++ -- vector类模拟实现
C++ – vector类模拟实现 0. 成员变量
66 0
|
C++ 容器
C++ vector 赋值、删除、排序类之外的其他函数
C++ vector 赋值、删除、排序类之外的其他函数
118 0