STL -- vector 和 list

本文主讲C++ STL中的vector和list,介绍了部分接口函数,分析这连两个数据结构的优劣。
其实者两个就类似于之前C语言阶段的顺序表双向链表

vector

vector介绍

vector是表示可变大小数组的序列容器, 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

vector接口

vector capacity

函数 功能
size() 返回实际元素个数。
resize() 改变实际元素的个数。
capacity() 返回当前容量。
empty() 判断容器中是否有元素,若无元素,则返回 true;反之,返回 false
reserve() 修改容器的容量

list modifiers

函数 功能
push_back() 在序列的尾部添加一个元素。
pop_back() 移出序列尾部的元素。
insert() 在指定的位置插入一个或多个元素。
erase() 移出一个元素或一段元素。
clear() 移出所有的元素,容器大小变为 0
swap() 交换两个容器的所有元素。
operator[ ] 重载了 [ ]运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。

vector iterator

函数 功能
begin() 返回指向容器中第一个元素的迭代器。
end() 返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使用。
rbegin() 返回指向最后一个元素的迭代器。
rend() 返回指向第一个元素所在位置前一个位置的迭代器。

vector优劣

优:

  • 支持高效随机访问。

劣:

  • 空间不够需要增容,就可能导致频繁增容和空间浪费的问题
  • 头部和中部插入数据时效率较低(因为需要挪动数据)

vector实现

#pragma once
#include <iostream>
#include <assert.h>
#include <algorithm>
//using namespace std;


namespace hw
{
   
   
	using std::swap;
	template <class T>
	class vector
	{
   
   
	public:
		typedef T* iterator;
		typedef const T* const_iterator;

		vector()
			:_start(nullptr)
			, _finish(nullptr)
			, _endofstorage(nullptr)
		{
   
   }

		////传统写法
		// //v2(v1)
		//vector(const vector<T>& v)
		//{
   
   
		//	_start = new T[v.capacity()];
		//	_finish = _start + v.size();
		//	_endofstorage = _start + v.capacity();

		//	memcpy(_start, v._start, v.size() * sizeof(T));

		//}

		//迭代器初始化
		//vector<int> v2(++v1.begin(), --v1.end());
		template <class InputIeterator>
		vector(InputIeterator first, InputIeterator last)
			:_start(nullptr)
			, _finish(nullptr)
			, _endofstorage(nullptr)
		{
   
   
			while (first != last)
			{
   
   
				push_back(*first);
				++first;
			}
		}

		void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eptcup_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值