C++基础以及stl-vector

vector 是一个动态增长的数组 使用模板来实现(模板元编程是真的黑科技)
注意:正是因为vector的动态增长,在某些条件下会触发不可预计的错误。比如和动态库一起使用 并使用它作为接口 进行传入传出 一方的数据被另一方更改,动态扩容之后,当函数返回时,申请的空间需要释放,这时会违背 存储在哪边申请哪边释放的原则,导致程序崩溃 如果强行要使用这个接口类型,传入时预定大小即可 注:string也会出现这个问题

1.使用
加入#include <vector>
使用方法都是类似vector<T> name;

//初始化
vector<int> vecTest;
vector<int> vecTest3(10, 0);//使用10个0填充
vector<int> vecTest5(10);//默认10个0填充
vector<int> vecTest2(vecTest);//使用vectest进行初始化
vector<int> vecTest4(vecTest.begin(), vecTest.end());//使用vectest的开始迭代器和结束迭代器进行初始化

2.迭代器

std::vector<T>::iterator temp = vecTest.begin();//用法

vecTest.begin();//初始迭代器
vecTest.end();//结束迭代器
vecTest.rbegin();//反向开始迭代器
vecTest.rend();//反向结束迭代器
vecTest2.cbegin();//指向常量的开始迭代器
vecTest2.cend();//指向常量的结束迭代器
vecTest2.crbegin();//指向常量的反向开始迭代器
vecTest2.crend();//指向常量的反向结束迭代器

拓展:

//以下两种为指向常量的指针 即只读
const char *p;//*p = '6' 之类会报错
char const *p;
//以下为常指针 即只指向这个内存
char * const p;//p++ 会报错

3.读取元素

vecTest[n] ;//访问n为下标的元素 0为开始

vecTest.at(n);//访问n为下标的元素 0为开始

vecTest.front(); //返回第一个元素的引用

vecTest.back(); //返回最后一个元素的引用

vecTest.data(); //返回第一个元素的指针

//迭代器访问  std::vector<T>::iterator temp = vecTest.begin();
*temp;
//用for访问  for(auto temp : vecTest)
*temp;

4.修改类

vecTest.assign(vecTest2.begin(), vecTest2.end());//将vecTest2赋给vecTest
vecTest.assign(n, 3);//将vecTest2赋给vecTest 填充n个3
int listTemp[] = {1776,7,4};
vecTest.assign (listTemp,listTemp+3);   // 从数组之中初始化

vecTest.push_back(3);//在末尾加入元素  会比emplace之类的慢

vecTest.pop_back();//在末尾删除元素 

//insert
vecTest.insert(vecTest.end(), 3);//在末尾插入
vecTest.insert(vecTest.end(), 4, 3);
int insertTemp[] = { 1, 2, 3, 4 };
vecTest.insert(vecTest.end(), insertTemp, insertTemp + 4);//使用数组在末尾插入
vecTest.insert(vecTest.end(), vecTest3.begin(), vecTest3.end());//使用迭代器在末尾插入

//erase
vecTest.erase(vecTest.begin());//删除指定位置
vecTest.erase(vecTest.begin(), vecTest.end());

vecTest.swap(vecTest2);//交换
vecTest.clear();//清空

vecTest.emplace(vecTest.begin(), 3);//在指定位置插入
vecTest.emplace_back(100);//在末尾插入

5,allocate

	std::vector<int> vectorTest;
	int* p;
	unsigned int i;

	p = vectorTest.get_allocator().allocate(5);

	for (i = 0; i < 5; i++) vectorTest.get_allocator().construct(&p[i], i);

	for (i = 0; i < 5; i++) std::cout << ' ' << p[i];
	std::cout << '\n';

	for (i = 0; i < 5; i++) vectorTest.get_allocator().destroy(&p[i]);
	vectorTest.get_allocator().deallocate(p, 5);

6.容量类

vectorTest.size();//元素数量
vectorTest.max_size();//能够接收的最大数量
vectorTest.resize(); //改变size
vectorTest.capacity(); //容量
vectorTest.reserve();//保留容量
vectorTest.empty(); //是否为空
vectorTest.shrink_to_fit();//改变capacity去适应size

vector和pair 能够简单的组合一些数据 但感觉struct能更清晰一点

	vector<pair<int, int>> userInfo({ make_pair(1, 1) });
	auto it = userInfo.begin();
	cout << "first " << (*it).first << "   second " << (*it).second << endl;

vector和algorithm

	vector<int> ag({ 1, 2, 3, 5, 4, 1, 7 });
	reverse(ag.begin(), ag.end());
	sort(ag.begin(), ag.end());
	auto it = find(ag.begin(), ag.end(), 7);
	cout << *it << endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值