360


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;

}

360_第1张图片




常见头文件

#include

#include

#include

http://blog.csdn.net/wlchen123/article/details/8219131

常见的:max、min、sort 、swap、

#include

#include

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

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

#include

C++中,string头文件基本上已经包含在iostream中了。

但是,平时使用的时候建议加上#include(尤其在以下情况下)

1、使用string类型

2、使用cin、cout语句来输入输出string类型变量(注意,同时还需要#include)

3、使用memset()、strlen()、strcpy()、strcat等函数时

函数原型char *strcpy(char *dest,const char *src)


#include

#include

#include

#include

#include

#include

#include

#include

#include


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;

你可能感兴趣的:(360)