C++中STL的容器vector

2023-12-13 06:05:45

什么是vector

vector:是数据结构里面的顺序表,开辟一段连续的空间存储内容

vector与普通顺序表不同的点

1、因为是用c++写的,里面包含了模版,可以是自定义类型,不止内置类型
2、自身提供了交换函数
3、c++11中引入了auto 可以使用范围for遍历
····

vector的成员函数

operator=

赋值操作
在这里插入图片描述
因为只重载了一个版本
vector类型=vector类型
如果其是其他类型会隐式类型转化

operator[]

[]:下标查找

#include"vector.h"
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	//arr.resize(2);
	arr.reserve(100);
	cout << arr[1]<< endl;
	return 0;
}


begin与end与iterator

iterator:迭代器,vector中是用模版指针定义的
begin:指向第一个元素
end:指向最后一个元素
使用方式:

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;
  for (int i=1; i<=5; i++) myvector.push_back(i);

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

size()

size():计算有效长度为多少
使用方式:

#include"vector.h"
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	cout << arr.size() << endl;
	return 0;
}


capacity

capacity:查当前顺序表中的容量

#include"vector.h"
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	cout << arr.capacity() << endl;
	return 0;
}


resize

resize:设置容量
如果resize<size()那么会缩容,并且吧数据删掉
如果resize在size()和capacity()之间那么也是缩容,不删数据
如果resize>capacity()那么就是扩容
在这里插入图片描述

empty

检查顺序表中有没有内容

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;
  int sum (0);

  for (int i=1;i<=10;i++) myvector.push_back(i);

  while (!myvector.empty())
  {
     sum += myvector.back();
     myvector.pop_back();
  }

  std::cout << "total: " << sum << '\n';

  return 0;
}

reserve

reserve:扩容
在这里插入图片描述

push_back

尾插

#include"vector.h"
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	//arr.resize(2);
	arr.reserve(100);
	cout << arr[1]<< endl;
	return 0;
}


pop_back

尾删

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	//arr.resize(2);
	//arr.reserve(100);
	cout << arr.size()<< endl;
	return 0;
}


insert

指定位置插入
可以插入一个,也可以多个
因为他重载的是迭代器参数,避免了定死了类型
所以要传的是迭代器

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.insert(arr.begin()+2, 30);
	//arr.resize(2);
	//arr.reserve(100);
	cout << arr.size()<< endl;
	return 0;
}


erase

删除指定位置的内容
重载的同样是迭代器
所以要传迭代器

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.insert(arr.begin()+2, 30);
	arr.erase(arr.begin() + 2);
	//arr.resize(2);
	//arr.reserve(100);
	cout << arr.size()<< endl;
	return 0;
}


swap

交换,跟vector类型的对象 交换所有东西

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	vector<int> s;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.pop_back();
	arr.insert(arr.begin()+2, 30);
	arr.erase(arr.begin() + 2);
	//arr.resize(2);
	//arr.reserve(100);
	s.swap(arr);
	cout << arr.size()<< endl;
	cout << s.size() << endl;
	return 0;
}

clear

清除字符串内容

#include"vector.h"
#include<iostream>
#include<vector>
using namespace std;



int main()
{
	//dabai::test1();
	vector<int> arr;
	vector<int> s;
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.push_back(11);
	arr.pop_back();
	arr.insert(arr.begin()+2, 30);
	arr.erase(arr.begin() + 2);
	//arr.resize(2);
	//arr.reserve(100);
	s.swap(arr);
	cout << arr.size()<< endl;
	cout << s.size() << endl;
	s.clear();
	cout << s.size() << endl;
	return 0;
}

成员变量

都是迭代器,我这个是自己写的
并不是官方的名字

	iterator _str;//首个元素的地址
	iterator _size;//尾元素的地址
	iterator _capacity;//容量

总结

跟普通的顺序表还是有区别的,总体变的好用了很多。
dp最大的噩梦

文章来源:https://blog.csdn.net/dabai__a/article/details/134901856
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。