1.要指向容器内的某个对象应该使用迭代器,迭代器是指针的泛指,这里不可以用指针去指向容器对象,将会类型不匹配

2.判断容器内是否含有某元素可以使用STL中的find方法,使用时需加上头文件algorithm.

find(start,end,value)

所有的返回,均是迭代器(容器)或指针(数组),而非是直观感觉上的索引下标。如果在查找范围内不存在,返回a.end(),这里需要注意的是,a.end()不在查找范围内,如下例子:

vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
vector<int>::iterator it;
it=find(a.begin(),a.end(),4);
if(it!=a.end()){
//查找对象存在
}else{
//查找对象不存在
}

3.vector::clear()函数的作用是清空容器中的内容,但如果是指针对象的话,并不能清空其内容,必须要像以下方法一样才能达到清空指针对象的内容
vector::erase()用于清空容器中的内容以及释放内存,并返回指向删除元素的下一个元素的迭代器。
不过要注意的就是在erase以后erase之前确定的指针的指向可能会有变化,这时候使用erase之前的指针需要重新赋值,一开始因为这个问题折腾了半天

4.set常用方法(使用时需要加上头文件set):
初始化:set<type> name
返回容器第一个元素地址:begin()
返回容器终点地址:end()
返回容器元素个数:size()
删除容器所有元素:clear()
判断容器是否为空:empty()
插入元素:insert()
遍历set集合可以使用C++11中新定义的auto来定义迭代器指针,因为set集合的一些方法返回值比较复杂,所以直接用auto即可
要注意的是set容器里元素不是按照插入时的顺序,是按照哈希值来进行排序的

for(auto it=s.begin();it!=s.end();it++){
...
}

5.只要输入不结束就一直输入的写法

while(getline(cin,str))
        {
                cout<<str<<endl;
        }

6.map容器:(使用时需加上头文件map)
变量定义:map<type,type> name
如果没有初始化而且设置为int,那么默认值会为0,比如在你使用name[i]的时候,就已经为它自动初始化一个key为i,value为0的对象了
变量赋值:直接用数组写法即可,如:

map<int,int> a;
a[1]=10;

查找并返回位置指针:find()
清空map容器:clear()
判断map容器是否为空:empty()
返回第一个元素地址:begin()
返回容器终点地址:end()
遍历用迭代器从第一个元素地址遍历到最后就行了就行了

map<int,int> a;
a[0]=1;
map<int,int>::iterator it;
it=a.begin();
while(it!=a.end()){
cout<<it->first<<it->second;//it->first是map元素的key值,it->second是map元素的value值
it++;
}

7.C++中把数组作为函数参数:
如果是一维数组,可以用指针,定义长度的数组,未定义长度的数组;

void method(int *a){}
void method(int a[10]){}
void method(int a[]){}

如果是二维数组同理,只是第二个长度一定要定义

void method(int a[][10]){}

8.对于链表结点有个比较机智的处理方法,结构体只写data和next,然后用address作为数组下标,这样处理就省去了对链表排序的过程,需要调用下一个链表对象只需要list[list[i].next]就可以了 ,柳婼

9.有个避免超时的小技巧是,如果题目需要往容器放一些内容,可以使用map来将对应内容指向的index保存下来,这样在调用的时候可以少一次遍历的时间