360真题
http://discuss.acmcoder.com/topic/58cd31e475bf559a0653f98f
http://www.jianshu.com/p/a3ffbc72d346
http://blog.csdn.net/cmershen/article/details/63686913
vector
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
3.2 详细的函数实现功能:其中vector c.
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.erase(pos) 删除pos位置的数据
c.erase(beg,end) 删除[beg,end)区间的数据
c.front() 传回第一个数据。
c.insert(pos,elem) 在pos位置插入一个elem拷贝
c.pop_back() 删除最后一个数据。
c.push_back(elem) 在尾部加入一个数据。
c.resize(num) 重新设置该容器的大小
c.size() 回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的迭代器
list
(http://blog.csdn.net/lskyne/article/details/10418823)
Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.
assign() 给list赋值
back() 返回最后一个元素
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 如果list是空的则返回true
end() 返回末尾的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回list的配置器
insert() 插入一个元素到list中
max_size() 返回list能容纳的最大元素数量
merge() 合并两个list
pop_back() 删除最后一个元素
pop_front() 删除第一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin() 返回指向第一个元素的逆向迭代器
remove() 从list删除元素
remove_if() 按指定条件删除元素
rend() 指向list末尾的逆向迭代器
resize() 改变list的大小
reverse() 把list的元素倒转
size() 返回list中的元素个数
sort() 给list排序
splice() 合并两个list
swap() 交换两个list
unique() 删除list中重复的元素
dequeue
C++ Deque(双向队列)
是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问,但它不像vector把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。向deque两端添加或删除元素的开销很小。它不需要重新分配空间,所以向末端增加元素比vector更有效。
实际上,deque是对vector和list优缺点的结合,它是处于两者之间的一种容器。
Deque的特点:
(1)随机访问方便,即支持[ ]操作符和vector.at(),但性能没有vector好;
(2)可以在内部进行插入和删除操作,但性能不及list;
(3)可以在两端进行push、pop;
(4)相对于verctor占用更多的内存。
双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。
1.Constructors创建一个新双向队列
语法:
deque();//创建一个空双向队列
deque( size_type size );//创建一个大小为size的双向队列
deque( size_type num, const TYPE &val ); //放置num个val的拷贝到队列中
deque( const deque &from );//从from创建一个内容一样的双向队列
deque( input_iterator start, input_iterator end );
// start和end -创建一个队列,保存从start到end的元素。
2.Operators比较和赋值双向队列
//可以使用[]操作符访问双向队列中单个的元素
3.assign()设置双向队列的值
语法:
void assign( input_iterator start, input_iterator end);
//start和end指示的范围为双向队列赋值
void assign( Size num, const TYPE &val );//设置成num个val。
4.at()返回指定的元素
语法:
reference at( size_type pos );返回一个引用,指向双向队列中位置pos上的元素
5.back()返回最后一个元素
语法:
reference back();//返回一个引用,指向双向队列中最后一个元素
6.begin()返回指向第一个元素的迭代器
语法:
iterator begin();//返回一个迭代器,指向双向队列的第一个元素
7.clear()删除所有元素
8.empty()返回真如果双向队列为空
9.end()返回指向尾部的迭代器
10.erase()删除一个元素
语法:
iterator erase( iterator pos ); //删除pos位置上的元素
iterator erase( iterator start, iterator end ); //删除start和end之间的所有元素
//返回指向被删除元素的后一个元素
11.front()返回第一个元素的引用
12.get_allocator()返回双向队列的配置器
13.insert()插入一个元素到双向队列中
语法:
iterator insert( iterator pos, size_type num, const TYPE &val ); //pos前插入num个val值
void insert( iterator pos, input_iterator start, input_iterator end );
//插入从start到end范围内的元素到pos前面
14.max_size()返回双向队列能容纳的最大元素个数
15.pop_back()删除尾部的元素
16.pop_front()删除头部的元素
17.push_back()在尾部加入一个元素
18.push_front()在头部加入一个元素
19.rbegin()返回指向尾部的逆向迭代器
20.rend()返回指向头部的逆向迭代器
21.resize()改变双向队列的大小
22.size()返回双向队列中元素的个数
23.swap()和另一个双向队列交换元素
语法:
void swap( deque &target );//交换target和现双向队列中元素
queue、priority_queue
(http://blog.csdn.net/chao_xun/article/details/8037438)
一.queue模版类的定义在头文件中。
queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是可选的,默认为dqueue类型。
定义queue对象的示例代码如下:
queueq1;
queueq2;
queue的基本操作有:
1.入队:如q.push(x):将x元素接到队列的末端;
2.出队:如q.pop() 弹出队列的第一个元素,并不会返回元素的值;
3,访问队首元素:如q.front()
4,访问队尾元素,如q.back();
5,访问队中的元素个数,如q.size();
二.优先队列
在头文件中,还定义了一个非常有用的模版类priority_queue(优先队列),优先队列与队列的差别在于优先队列不是按照入队的顺序出队,而是按照队列中元素的优先权顺序出队(默认为大者优先,也可以通过指定算子来指定自己的优先顺序)。
priority_queue模版类有三个模版参数,元素类型,容器类型,比较算子。其中后两个都可以省略,默认容器为vector,默认算子为less,即小的往前排,大的往后排(出队时序列尾的元素出队)。
定义priority_queue对象的示例代码如下:
priority_queueq1;
priority_queue >q2;
priority_queue,greater >q3;//定义小的先出队
priority_queue的基本操作均与queue相同
初学者在使用priority_queue时,最困难的可能就是如何定义比较算子了。如果是基本数据类型,或已定义了比较运算符的类,可以直接用STL的less算子和greater算子——默认为使用less算子,即小的往前排,大的先出队。如果要定义自己的比较算子,方法有多种,这里介绍其中的一种:重载比较运算符。优先队列试图将两个元素x和y代入比较运算符(对less算子,调用xy),若结果为真,则x排在y前面,y将先于x出队,反之,则将y排在x前面,x将先出队。
大数组
你这个数组申明在函数内部,属于局部变量,存放在了栈上,
看看数组占用的内存大小:1000000=1000*1000然后乘以int型数据长度
1000*1000*4byte约等于4M,
而栈的默认内存空间为1M左右,所以会导致内存溢出
解决这个问题,可以将数组申明在全局存储区或堆上即可
方法一:
在VC的Project setting里的link选项卡里把栈开大一点(windows里默认是4M)
方法二:
声明成全局或static的,这两种变量不压栈,想开多大都可以
方法三:
int *A = new int[90000];
.....
delete A;
方法四:
用vector
#include
using namespace std;
void main()
{
vector A(90000);
A[0] = 1;
}
常见头文件
#include <cstdio>
#include <cmath>
#include <algorithm>
http://blog.csdn.net/wlchen123/article/details/8219131
常见的:max、min、sort 、swap、
#include <iostream>
#include <cstring>
C++里的 cstring对应C语言的string.h
string.h是C中处理字符串的函数的声明,string是C++中string类的头文件,尽管在C++中包含string.h是允许的,但C++标准建议用头文件cstring来替代string.h
里面常用:
strcmp(a,b)==0 比较字符串是否相同,相同返回值是0,a>b返回正数;a<b返回负数
memset(a,0,sizeof(a)); 把字符串清空(所有字符元素全变成\0)
strlen(a); 计算这个字符串的长度(到第一个\0为止)
strcpy
strcat:char * strncat ( char * destination, const char * source, size_t num );
Append characters from string
Appends the firstnumcharacters ofsourcetodestination, plus a terminating null-character.
If the length of the C string insourceis less thannum, only the content up to the terminating null-character is copied.
#include <map>
#include <string>
C++中,string头文件基本上已经包含在iostream中了。
但是,平时使用的时候建议加上#include(尤其在以下情况下)
1、使用string类型
2、使用cin、cout语句来输入输出string类型变量(注意,同时还需要#include)
3、使用memset()、strlen()、strcpy()、strcat等函数时
函数原型char *strcpy(char *dest,const char *src)
#include <stack>
#include <cctype>
#include <vector>
#include <queue>
#include <set>
#include <utility>
#include <cassert>
#include <numeric>
#include <sstream>
using namespace std;
#define Online_Judge
#define outstars cout << "***********************" << endl;
#define clr(a,b) memset(a,b,sizeof(a))
#define lson l , mid , rt << 1
#define rson mid + 1 , r , rt << 1 | 1
#define mk make_pair
const int MAXN = 1000 + 50;
const int MAXS = 10000 + 50;
const int sigma_size = 26;
const long long LLMAX = 0x7fffffffffffffffLL;
const long long LLMIN = 0x8000000000000000LL;
const int INF = 0x7fffffff;
const int IMIN = 0x80000000;
const int inf = 1 << 30;
#define eps 1e-10
const long long MOD = 1000000000 + 7;
const int mod = 10007;
typedef long long LL;
const double PI = acos(-1.0);
typedef double D;
typedef pair pii;
typedef vector vec;
typedef vector mat;
typedef vector vs;