15分钟速通C++知识点

1.Vector

#include<iostream>
#include<map>
#include<set>
#include<string>
#include<vector>
using namespace std;
int main()
{
	//vector<数据类型>数组名
	//push_back()
	//遍历vector
	//find 查找vector中元素位置
	//erase 删除vector中元素
	int a[100];
	vector<int> v;
	v.push_back(1);//0
	v.push_back(2);//1
	v.push_back(2);//2
	v.push_back(3);//3
	//1 2 3
	// v.size() 动态数组v中元素个数
	//v.size()=3
	for (int i = 0; i<v.size(); i++)
	{
		cout<<v[i]<<" ";//遍历vector
	}
	cout << "\n";
	//find() 查找函数 查找最先出现元素的位置 
	// auto it=find(v.begin(),v.end(),x) 在数组v中查找x第一次出现的位置
	auto it = find(v.begin(), v.end(),2)-v.begin();
	//cout << it << '\n';
	v.erase(v.begin() + it);//删除指针(迭代器)it的空间 
    for (int i = 0; i < v.size(); i++)//1 2 3
	{
		cout << v[i] << " ";//遍历vector
	}
	return 0;
}

set&multiset

#include<iostream>
#include<map>
#include<set>
#include<string>
#include<vector>
using namespace std;
int main()
{
	//set的性质
	//1.不重复{1,1,2,3}
	//2.自动排序(从小到大)
	set<int>st;//定义一个名称为st的set容器
	//set的基本操作
	//1.st.insert(x); 往st容器中塞元素
	//2.st.erase(x); 删除st容器中值为x的元素
	st.insert(2);//把2塞进st
	st.insert(1);//1 2 
	st.insert(1);//出现重复元素则自动屏蔽 1 2
	st.erase(1);//删除1
	for (auto it : st) cout << it << ' ';//1 2
	cout << endl;
	multiset<int>mst; 
	mst.insert(2);
	mst.insert(1); 
	mst.insert(1);
	mst.erase(1);
	for(auto it : mst) cout << it << ' ';//1 1 2
	return 0;
}

Map&multimap

#include<iostream>
#include<map>
#include<set>
#include<string>
#include<vector>
using namespace std;
int main()
{
	//1.map<type,type>mp 定义和性质
	//vector<int>v;
	//set<int>st;
	/*
	map<int,int>mp;//定义了一个叫mp的map<int,int>容器
	//2.map的存储
	mp[100000000001]=82,mp[100000000002]=80, mp[100000000003]=65;
	//输出10000000001的成绩
	if(mp.find(100000000003)==mp.end())
	{
		cout << "没有此人信息!" << endl;
	}
	else
	{
		cout << mp[100000000001] << endl;
	}
	*/
	//3.map的访问
	//储存一个班级学生的姓名和对应的成绩
	//xiaoming 85 xiaohong 65
	//int a[100000000005];
	//a[100000000001] = 82, a[100000000002] = 80, a[100000000003] = 65;
	map<string, int>mp;
	mp["xiaoming"] = 85, mp["xiaohong"] = 65;//定义了一个叫mp的map<string,int>容器
	cout << mp["xiaohong"] << endl;
	map<string, int>::iterator it;//定义了一个map<string,int>类型的迭代器it
	for(it=mp.begin();it!=mp.end();it++)
	{
		cout << it->first << " " << it->second << "\n";
		//cout<< (*it).first << " " << (*it).second << "\n";
	}
	/*
	map<int, int>mp1;//map自动按frist的字典序从小到大排序
	mp1[2] = 23, mp1[1] = 32;

	map<string, int>::iterator it;//定义了一个map<string,int>类型的迭代器it
	//xiaoliang
	//cout<< mp["xiaoliang"] << endl;	
	//map的遍历
	for (auto it : mp) {
		cout << it.first <<" " <<it.second<< "\n";
	}
	for (auto it : mp1) {
		cout << it.first << " " << it.second << "\n";
	}
	*/
	//map的type拓展
	map<vector<int>, int>s;
	return 0;
}

Vector存图

#include<iostream>
#include<map>
#include<set>
#include<string>
#include<vector>
using namespace std;
int main()
{
	int n, m;//n表示点数,m表示边数
	vector<int>v;//定义了一个名为v的动态数组
	int a[10][10];//定义了一个二维数组
	vector<int>v1[105];//定义了名为v1的二维动态数组
	//每个v1[i]都是一个vector
	//v[1]
	//v1[1].push_back(2);
	//v1[1].push_back(11);
	//for(int i=0;i<v1[1].size();i++) cout<<v1[1][i]<<" ";
	//1-2 1-3 2-3 2-4 3-4
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		int from, to;
		cin >> from >> to;
		v1[from].push_back(to);
		v1[to].push_back(from);
	}
	for (int i = 1; i <= n; i++)//遍历1-n号节点
	{
		for (int j = 0; j < v1[i].size(); j++)//遍历i号节点的所有邻接节点
		{
			int x = v1[i][j];
			cout << i << " " << x << "\n";
		}
	}
	return 0;
}

时间复杂度&空间复杂度

#include<iostream>
#include<map>
#include<set>
#include<string>
#include<vector>
using namespace std;
int main()
{
	//时间复杂度:对于程序大致运行时间的描述
	int a, b, n, m;
	cin >> a >> b;
	if (a > b) {//O(1)
		a++;
	}
	for (int i = 1; i <= n; i++) {//O(n)
		a++;
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {//O(nm)
			a++;
		}
	}
	//1s 2s
	//1e8 = 10 ^ 8;
	for (int i = 1; i <= 1e8; i++) {//1s
		a++;
	}
	//空间复杂度:对于程序大致运行空间的描述
	//bety = b;
	int a;//int占4byte
	//题目中经常出现的空间限制 128mb 256mb 512mb 1gb
	//1mb-1024kb
	//1kb=1024b
	//1mb=1024*1024b=1e6(10^6)b
	//1mb可以开1e6/4=2.5*10^5个int类型的变量
	//256mb=256*2.5*10^5=6e7大小的数组
	//128mb=256/2=3e7
	return 0;
}

Pair

#include<bits/stdc++.h>
using namespace std;
int main(){
	//创建 pair
	//方式一
	pair<string,int>p;
	p.first="hello";
	p.second=120;
	//方式二
	pair<double,string>p1(3.14,"hello");
	//cout<<p1.first<<" "<<p1.second;
	//方式三
	pair<string,int>p3;
	p3=make_pair("world",123);
	cout<<p3.first<<" "<<p3.second;
return 0;
}

Stack

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

int main() {
	stack<int>a;//创建一个叫a的int型栈
	//入栈
	a.push(1);//放入1到栈a中
	a.push(2);//放入2到栈a中
	a.push(3);//放入3到栈a中
	//1 2 3
	//返回栈长度
	cout << "栈的长度:" << a.size() << "\n";
	//返回栈顶元素
	cout << "栈的顶部元素(一):" << a.top() << "\n";
	//出栈
	a.pop();
	cout << "出栈一次.\n";
	//再次返回栈顶元素
	cout << "栈的顶部元素(二):" << a.top() << "\n";
	//出栈二次
	a.pop();
	cout << "出栈二次.\n";
	//此时栈非空
	if (a.empty()) cout << "栈为空.\n";
	else cout << "栈非空.\n";
	//出栈三次
	a.pop();
	cout << "出栈三次.\n";
	//此时栈为空
	if (a.empty()) cout << "栈为空.\n";
	else cout << "栈非空.\n";
	return 0;
}

IT迭代器(iterstor)

#include<vector>
#include<iterator>
#include<iostream>
using namespace std;
struct st{
	string s;
	int y,m,d;
};
vector<st>a(4);
//iterator(it迭代器)
//迭代器->指针
int main() {
	st c;
	c.s="xie";
	a.push_back(c);
	a[0].s="zhang";
	a[1].s="wang";
	a[2].s="li";
	a[3].s="ju";
	vector<st>::iterator it;
    //it=a.begin();
    //cout<<*(it);
    for(it=a.begin();it!=a.end();it++){
		cout<<it->s<<" ";//用结构体时要用->访问成员,平时用*it
	}
//  *:返回元素地址 \
	++:迭代器指向下一个元素 \
	==和!=:判断地址 \
	=:迭代器赋值(两个迭代器可以相互赋值)
	return 0;
}

0 条评论

目前还没有评论...