STL容器总结vector

一.容器简介

顺序容器

容器模板特点
向量容器vector从后面快速插入与删除,可以直接访问任何元素。
双向列表容器list从任何地方快速插入与删除
双端链表容器deque从前面或者后面快速插入与删除,可以直接访问任何元素。

 遍历:

#include <iostream>
#include <vector>
using namespace std;

int main(){
	vector<int> vec;
	int n;
	while(cin >> n){
		vec.push_back(n);
	}
	
	for(int i=0;i<vec.size();++i){
		cout << vec[i] << endl;
	}
	
	//指针遍历数组
	int arr[] = {1,2,3,4,5,6};
	int* p = arr;
	while(p!=arr+6){
		cout << *p << " ";
		++p; 
	} 
	cout << endl;
	
	//迭代器写法(类似指针)
	vector<int>::iterator it = vec.begin();
	while(it!=vec.end()){
		cout << *it << " ";
		++it;
	}
	cout << endl;
	
	//const类型:
	const vector<int> cvec = vec; 
	vector<int>::const_iterator cit = cvec.cbegin();
	while(cit!=cvec.cend()){
		cout << *cit << " ";
		++cit;
	}
	cout << endl;
	
	//C++11 begin() end()
	vector<int>::iterator it2  = begin(vec);
	while(it2 !=end(vec)){
		cout << *it2 << " ";
		++it2;
	}
	cout << endl;
	
	int* q = begin(arr);
	while(q!=end(arr)){
		cout << *q++ << " ";
	}
	cout << endl;
	
	//C++ base-scope-for
	for(int n:arr){//arr依次把每个值赋给n 
		cout << n << " ";
	}
	cout << endl;
	
	for(int n:vec){//vector也支持 
		cout << n << " ";
	}
	cout << endl;
}

 list的写法和vector的插入删除:

#include<iostream>
#include<list>
#include<vector>
using namespace std;
//用list遍历: 
int main(){
	list<int> li;
	for(int i=0;i<10;i++){
		li.push_back(i);
		//list也有头插
		//li.push_front(i); 
	}
	//2.vector只提供了尾部插入删除 push_back()/pop_back()
	//  list同时提供了头部插入删除 push_front()/pop_front(); 
	
	//1.不能使用下标访问/随机访问,list不是连续的 
	//使用STL迭代器 
	list<int>::iterator it = li.begin();
	while(it!=li.end()){
		cout << *it << " ";
		*it = 10 + *it;//可以修改值(每个值加10) 
		++it;
	}
	cout << endl;
	
	const list<int> cli = li;
	list<int>::const_iterator cit = cli.begin() ;
	while(cit!=cli.end()){
		cout << *cit << " ";
		++cit;
	}
	cout << endl;
	
	//3.list提供元素删除 remove()
	li.remove(15);
	
	//4.排序(默认正序) 
	li.sort(); 
	
	//begin() end()
	//C++11 STL base-scape-for
	for(int n:li){
		cout << n << " ";
	}
	cout << endl;
	
	//C++11特有:大括号初始化 
	list<int> li2 = {4,7,2,3,1};
	for(int n:li2){
		cout << n << " ";
	}
	cout << endl;
	
	//list访问第n个元素
	//使用迭代器:
	list<int>::iterator it2 = li2.begin();
	//++it2;
	//++it2;
	advance(it2,2);//迭代器向后移动两次 
	cout << *it2 << endl;//访问第三个元素 
	cout << *it2 << " " << distance(li2.begin(),it2) << endl;//当前it2前有几个数字 
	//or:
	list<int>::iterator it3 = li2.end();
	//--it3;
	//--it3;
	advance(it3,-2);//迭代器向前移动两次 
	cout << *it3 << endl;
	cout << *it3 << " " << distance(li2.begin(),it3) << endl;
	
	//vector头部插入
	vector<int> vec = {2,4,6,8,1,3,5};
	vec.insert(vec.begin(),100); //在vec开头插入100
	for(int n:vec){
		cout << n << " ";
	} 
	cout << endl;
	//在第二个数字后插入200 
	vector<int> ::iterator it4 = vec.begin();
	advance(it4,2);
	vec.insert(it4,200);
	for(int n:vec){
		cout << n << " ";
	} 
	cout << endl;
	//删除vector第一个数字 
	vec.erase(vec.begin());
	for(int n:vec){
		cout << n << " ";
	} 
	cout << endl;
	//删除vector中的语句 
	vector<int> ::iterator it5 = vec.begin();//每次都重新获取一遍 
	advance(it5,1);
	vec.erase(it5); 
	for(int n:vec){
		cout << n << " ";
	} 
	cout << endl;
}

erase删除一段元素时应注意:

如果没有erase操作,再将迭代器指向下一个元素。

vector<int>::iterator itr = v.begin();
   while (itr!=v.end())
   {
       if (*v==1)
    {
        itr=v.erase(itr);
    }
 
       else
        itr++;
   }

二.容器通用操作

1.实例化

实例化方式作用顺序容器关联容器容器适配器
C <T> c默认构造
C c(c1)复制构造
C c(it_b,it_e)范围构造
C c(n,t)填充构造xx
C c(n)初始化大小xx
#include<iostream>
#include<list>
#include<vector>
using namespace std;

template<typename T>
void PrintContainer(const T& c){
	for(int n:c){
		cout << n << " ";
	}
	cout << endl;
}

int main(){
	//初始化指定个数,指定值 
	list<int> li(5,10);//构造5个10
	PrintContainer(li);
	
	//把list数据放进vector
	vector<int> vec(li.begin(),li.end());
	PrintContainer(vec);

    for(int&n n:vec){//加了“&”引用才可以改值 
		n = 100;
	}
	PrintContainer(vec); 

    stack<int> s;
	for(int n:vec){//入栈 
		s.push(n);
	}
	//栈与队列不能直接遍历,也没有迭代器 
	while(!s.empty()){
		cout << s.top() << " ";
		s.pop();//只能用出栈的方式输出 
	}
	cout << endl;
	
	//队列: 
	queue<int> q;
	for(int n:vec){//入队 
		q.push(n);
	}
	while(!q.empty()){
		cout << q.front() << " ";
		q.pop();//只能用出栈的方式输出 
	}
} 

C++进阶:STL容器总结 - 简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vector是C++标准库中的一个动态数组容器,提供了一种方便的方式来存储和操作一系列的元素。vector可以自动调整大小,可以在尾部快速插入和删除元素,并且支持随机访问。 以下是vector的一些重要特点和用法: 1. 定义和初始化vector: 可以使用以下方式定义和初始化一个vector: ```cpp std::vector<int> vec; // 定义一个空的vector std::vector<int> vec1(5); // 定义一个包含5个默认初始化元素的vector std::vector<int> vec2(5, 10); // 定义一个包含5个值为10的元素的vector std::vector<int> vec3 = {1, 2, 3, 4, 5}; // 使用初始化列表初始化vector ``` 2. 访问和修改元素: 可以使用下标运算符[]或at()函数来访问和修改vector中的元素。例如: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; int firstElement = vec; // 访问第一个元素 int secondElement = vec.at(1); // 访问第二个元素 vec = 10; // 修改第三个元素的值为10 ``` 3. 插入和删除元素: 可以使用push_back()函数在vector的尾部插入一个元素,使用pop_back()函数删除尾部的元素。也可以使用insert()函数在指定位置插入元素,使用erase()函数删除指定位置的元素。例如: ```cpp std::vector<int> vec = {1, 2, 3}; vec.push_back(4); // 在尾部插入元素4 vec.pop_back(); // 删除尾部的元素 vec.insert(vec.begin() + 1, 10); // 在第二个位置插入元素10 vec.erase(vec.begin() + 2); // 删除第三个位置的元素 ``` 4. 获取vector的大小和容量: 可以使用size()函数获取vector中元素的个数,使用capacity()函数获取vector的容量(即当前分配的内存空间大小)。例如: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; int size = vec.size(); // 获取元素个数,结果为5 int capacity = vec.capacity(); // 获取容量,结果可能大于等于5 ``` 5. 遍历vector: 可以使用迭代器或范围for循环来遍历vector中的元素。例如: ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; } // 或者使用范围for循环 for (int num : vec) { std::cout << num << " "; } ``` 这些只是vector的一些基本用法,还有很多其他的函数和特性可以探索和使用。你可以参考C++标准库的文档或其他相关资料来深入了解vector的更多用法和细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值