【ACM实践一】C++基础

数据类型

布尔类型 bool,取值为true/false

字符串类型 string
实例:输入数据的每行包含若干个(至少一个)以空格隔开的整数,输出每行中所有整数之和。

#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main() {
	string line;
	while(getline(cin, line)) {
		int sum = 0, x;
		stringstream ss(line);  //可以把string作为流进行读写,定义在sstream头文件中。
		while(ss >> x) sum += x;
		cout << sum << "\n";
	}
	return 0;
}

结构体struct 和 类class
C++不再需要用typedef的方式定义一个struct,而且在struct里除了可以有变量(称为成员变量)之外还可以有函数(称为成员函数)。
例:

struct Point //定义点 (x,y)
{
	int x, y;
	Point(int x=0, int y=0):x(x),y(y) {}
};
Point operator + (const Point& A,const Point& B) //定义运算符
{
	return Point(A.x+B.x, A.y+B.y);
}


STL(Standard Template Library)

<algorithm>——常用函数

sort 排序

	sort(a,a+n); //排序
	sort(a,a+n,cmp)

sort可以对任意对象进行排序,不一定是内置类型。
如果希望用sort排序,这个类型需要定义“小于”运算符,或者在排序时传入一个“小于”函数。

lower_bound 二分查找

int p = lower_bound(a, a+n, x) - a; //在已排序数组a中寻找x

unique 去重(离散化)

//删除有序数组中的重复元素,返回去重后元素个数
int m = unique(arr, arr+n)-arr;
<vector>

vector是一个模板类,所以需要用vector<int> a或者vector<double> b这样的方式来声明一个vector。

clear( )清空
resize( )改变大小
push_back( )、pop_back( )在尾部添加和删除元素
empty( )测试是否为空

vector之间可以直接赋值或者作为函数的返回值,前面的sort、lower_bound、unique同样可以用在vector上

典型应用:图论存边(邻接表)

<set>集合

set就是数学上的集合——每个元素最多只出现一次。
和sort一样,自定义类型也可以构造set,但同样必须定义“小于”运算符。

insert()在集合中插入元素
erase()删除集合中的元素
set_union 求两个集合的并集
set_intersection 求两个集合的交集
find()返回一个指向被查找到元素的迭代器
<map>映射

map就是从键(key)到值(value)的映射。因为重载了[ ]运算符,map像是数组的“高级版”。例如可以用一个map<string,int>month_name来表示“月份名字到月份编号”的映射,然后用month_name[“July”]=7这样的方式来赋值。

insert 
find 
count
remove
<stack>栈

所谓栈,就是符合“后进先出”(Last In First Out,LIFO)规则的数据结构,有PUSH和POP两种操作,其中PUSH把元素压入“栈顶”,而POP从栈顶把元素“弹出”。

<queue>队列

队列是符合“先进先出”(First In First Out,FIFO)原则的“公平队列”
STL的queue头文件提供了队列,用“queues”方式定义,用push( )和pop( )进行元素的入队和出队操作,front( )取队首元素(但不删除)

<deque>双端队列

可以在头部和尾部进出

pop_back(), pop_front
push_back(), push_front()
<priority_queue>优先队列

优先队列是一种抽象数据类型(Abstract Data Type,ADT),行为有些像队列,但先出队列的元素不是先进队列的元素,而是队列中优先级最高的元素。

STL的优先队列也定义在头文件里,用“priority_queuepq”来声明。这个pq是一个“越小的整数优先级越低的优先队列”。由于出队元素并不是最先进队的元素,出队的方法由queue的front( )变为了top( )。

自定义类型也可以组成优先队列,但必须为每个元素定义一个优先级。
priority_queue<int,vector,cmp>pq
对于一些常见的优先队列,STL提供了更为简单的定义方法,例如,“越小的整数优先级越大的优先队列”可以写成“priority_queue<int,vector,greater >pq”。
注意,最后两个“>”符号不要写在一起,否则会被很多(但不是所有)编译器误认为是“>>”运算符。

引用传参

比指针方便且不容易出错

#include<iostream>
using namespace std;

//不命名为swap的原因是algorithm这个头文件里已经提供过了swap,可以直接使用,并且功能十分强大
void swap2(int& a, int& b)
	{
	int t = a; a = b; b = t;
	}	
int main()
	{
	int a = 3, b = 4;
	swap2(a, b);
	cout << a << " " << b << "\n";
	return 0;
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值