c++中vector,stack,queue,set, string的常用操作

本文详细介绍C++标准模板库(STL)中的vector、stack、queue、set、string等容器的常用操作,包括如何创建、修改及使用这些容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍c++ STL中关于vector,stack,queue,set, string的常用操作

 

目录

一.vector

二.stack

三.queue

四.set

五. string

六. list


一.vector

vector<int> v;v.size(); //大小
v.empty(); //为空返回true
v.push_back(val); //末尾添加元素
v.pop_back(); //末尾删除元素
v.insert(v.begin(),val);//在最前面插入新元素。 
v.insert(v.begin()+2,val);//在迭代器中第二个元素前插入新元素 
v.insert(v.end(),val);//在向量末尾追加新元素。
v.erase(v.begin());//删除第一个元素
v.erase(v.begin()+n); //删除第n+1个元素 
v.erase(v.begin() + 1, v.begin() + 3);//删除v.begin() + 1和v.begin() + 2两个元素

v.begin(); //指向第一个元素
v.end(); //指向最后一个元素的下一个位置
v.front(); //第一个元素
v.back(); //最后一个元素

lower_bound(v.begin(), v.end(), t) //返回第一个大于或等于t的元素位置 
upper_bound(v.begin(), v.end(), t) //返回第一个大于t的元素位置

 

//找vector中的最大值与最小值以及其下标 
#include <iostream>
#include <string>
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;


int main()
{
	vector<int> v(4, 0);
	
	for(int i = 0; i <= 3; ++i)
	{
		v[i] = i;
	}
	
	vector<int>::iterator m = max_element(v.begin(), v.end()); //最小值用min_element(v.begin(), v.end()); 
	cout << *m << distance(v.begin(), m) << endl;
	
	return 0;
}
//vector二维数组大小初始化 
#include <iostream>

#include <vector>
#include <algorithm>

using namespace std;


int main()
{
	/* 
	int m, n;
	
	cin >> m >> n;
	vector<vector<int> > vv(m, vector<int>(n));
	
	for(int i = 0; i < vv.size(); ++i)
	{
		for(int j = 0; j < vv[i].size(); ++j)
		{
			cout << vv[i][j];
		}
		cout << endl;
	}
	*/
	
	int m;
	
	cin >> m;
	vector<vector<int> > vv(m);
	
	for(int i = 0; i < vv.size(); ++i)
	{
		vv[i].resize(i+1);
	}
	
	for(int i = 0; i < vv.size(); ++i)
	{
		for(int j = 0; j < vv[i].size(); ++j)
		{
			cout << vv[i][j];
		}
		cout << endl;
	}
	
	return 0;
}

 

二.stack

stack<int> s;

s.empty();   //判断栈是否为空,如果是空,返回true
s.size();    //返回栈中元素的个数

s.top();     //取栈顶元素,返回栈顶元素
s.push(val)    //压栈,无返回值
s.pop();     //退栈,无返回值


三.queue

queue<int> q;

q.empty(); //如果队列空则返回真
q.size();  //返回队列中元素的个数

q.front(); //第一个元素
q.back(); //最后一个元素

q.pop(); //删除第一个元素
q.push(val); //在末尾加入一个元素


//优先队列,操作和普通queue类似
//建立堆的时间复杂度是O(n), 删除堆顶元素的时间复杂度是O(logn)
priority_queue<int> q;
q.top() //访问队头元素
q.push(val) //插入元素到队尾 (并排序)
q.emplace(val);  //原地构造一个元素插入队尾

//双端队列
deque<int> q;
q.push_back(val); //在尾部添加一个数据
q.push_front(val); //在头部插入一个数据
q.pop_back(); //删除最后一个数据
q.pop_front(); //删除容器第一个数据
q.front(); //返回第一个数据。
q.back(); //返回最后一个数据

 

四.set

//每个元素最多只出现一次,并且set中的元素已经从小到大排好序。
set<int> s;
 
s.begin(); //返回第一个元素的地址
s.end(); //返回最后一个元素的下一个地址
s.clear(); //删除所有的元素
s.empty(); //判断是否为空
s.max_size(); //返回包含的元素最大个数
s.size();   //返回当前元素个数
s.erase(it); //删除迭代器指针it处元素
s.insert(a); //插入某个元素

s.rbegin() //返回一个逆序迭代器,它指向容器的最后一个元素 
s.rend() //返回一个逆序迭代器,它指向容器的第一个元素前面的位置

 

s.lower_bound(t) //返回第一个大于或等于t的元素位置 
s.upper_bound(t) //返回第一个大于t的元素位置

 

五. string

string s = "123456";
//string的常见用法和vector类似, 比如s.front(), s.back(), s.push_back(c), s.pop_back()
int int_s = stoi(s); //stirng to int
s = to_string(int_s); //int to string;
pos = s.find("3", 5) //从下标5开始查找字符串"3"的下标,找不到返回string::npos或者写作s.npos
sub_s = s.substr(1, 2) //返回从下标1开始长度为2的字符,这里得到字符串"23"
//分割字符串
//方法一
while((npos = s.find(" ", pos)) != s.npos){
      vs.push_back(s.substr(pos, npos-pos));
      pos = npos+1;
}
vs.push_back(s.substr(pos, s.size()-pos));

//方法二
istringstream strs(s);
vector<string> words;
string word;
while(strs>>word){
    words.push_back(word);
}

 

六. list

list<int> li;
li.push_front(val); //首部添加元素
li.push_back(val); //尾部添加元素
li.pop_front(); //删除头部元素
li.pop_back(); //删除尾部元素
li.erase(); //删除第一个元素
li.remove(val); //删除val元素
li.begin(); //首部迭代器
li.end(); //尾部迭代器
li.front(); //首部元素
li.back(); //尾部元素

参考:https://blog.youkuaiyun.com/lskyne/article/details/10418823

六. map

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值