1、 为了保证安全,所有的push_back和insert插入的都是插入对象的拷贝而非元对象。
2、 使用empty()而不是使用size()==0来判断是否为空。
3、 font()、back()使用前一定判断是否为空,返回的是对象。
4、 STL提供了很多容器区间函数,用来进行区域操作,效率比自己写高很多。
5、 erase返回是删除对象的下一个迭代子,用来循环删除。iter=erase(iter),erase(iter++)
6、 reserve、resize是不必要的内存分配
7、 巧用swap来节省空间:vector<T>(vec).swap(vec)、string(s).swap(s)。
8、 map、set需要自定义比较函数.
9、 reverse_iterator,迭代时需要考虑是否需要做递减操作。
10、 排序:
10.1:如果需要对数组(vector,string,deque)执行一次完全排序,使用sort;如果还需要稳定的顺序,用stable_sort
10.2:如果需要对数组执行一次不完全排序,即只排序最前面的若干个,使用partial_sort。
10.3:如果需要找一个数组的第n哥位置的元素,火灾等价性最前面的n哥元素,且不需要保证顺序,使用nth_element
10.4:讲一个序列容器按照某个条件区分开来,使用partition、stable_partition
10.5:如果对list进行操作,调用list::sort比sort更优
11、vec.erase(remove(vec.begin(),vec.end,m), vec.end()),list除外。Unique也要remove和erase配合。
2、 使用empty()而不是使用size()==0来判断是否为空。
3、 font()、back()使用前一定判断是否为空,返回的是对象。
4、 STL提供了很多容器区间函数,用来进行区域操作,效率比自己写高很多。
5、 erase返回是删除对象的下一个迭代子,用来循环删除。iter=erase(iter),erase(iter++)
6、 reserve、resize是不必要的内存分配
7、 巧用swap来节省空间:vector<T>(vec).swap(vec)、string(s).swap(s)。
8、 map、set需要自定义比较函数.
9、 reverse_iterator,迭代时需要考虑是否需要做递减操作。
10、 排序:
10.1:如果需要对数组(vector,string,deque)执行一次完全排序,使用sort;如果还需要稳定的顺序,用stable_sort
10.2:如果需要对数组执行一次不完全排序,即只排序最前面的若干个,使用partial_sort。
10.3:如果需要找一个数组的第n哥位置的元素,火灾等价性最前面的n哥元素,且不需要保证顺序,使用nth_element
10.4:讲一个序列容器按照某个条件区分开来,使用partition、stable_partition
10.5:如果对list进行操作,调用list::sort比sort更优
11、vec.erase(remove(vec.begin(),vec.end,m), vec.end()),list除外。Unique也要remove和erase配合。