C++容器类的简介

一、原型与构造函数

Vector的原型可定义为

vector<T, allocator <T> >

其构造函数为

vector()             //空的

vector(al)          //指定一种allocator

vector(n)          //用默认T()初始化n个元素

vector(n, val)   //用Val初始化n个元素

vector(n,val,al)         //用val初始化n个元素,用al做分配器

vector(first,last)       //从己有的first到last复制生成

vector(first,last,al) //从己有的first到last复制生成,用al做分配器

二、操作

1.开辟N个空间

vecobj.reserve(N);

2.当前(又一次分配内存前)得到最大容量

capacity();

3.又一次分配内存为N

resize(N)

假设变小,则删除多余。假设变大,则用T()添充

4.清空

clear();

注意,clear()和resize()都不一定使得vector变小,若欲释放内存,请使用vecobj.swap(vector<T, A>())

5.存取首尾元素

front()与back()操作,取后一个和最前一个元素,注意其返回是引用,其而是左值(l_value),因此能够赋值. 做相似于vecobj.front() = 3;的操作,但要保证front空间有效,否则形为无法预測。

6.取值

[]与at能够做此操作,at会检查,假设越界有会out_of_range的异常被throw

7.push_back, pop_back

要保证不为空

8.使用assign

assign能够改变大小和初值,大小是任意的,不受開始时大小的限制,假设设置为0,则清空。

assign(5,0)把vector改为5个大小,并用0添充

assign(iax+3,iax+5); 从数组第4到5个填充,注意左闭右开,就可以取到iax[3]与iax[4]

9.使用insert

insert(it, x),在it前插入一个元素x

insert(it,first,last),在it前插入一个序列[first,last)左闭右开

10.使用erase

erase(it)删除在it处的元素,返回值为下一元素。假设intVec.erase(intVec.end());并不会报错,假设删除一个序列[first,last),使用erase(first,last)

11.BVector是vector<bool>的特化版,详细的用途有待查证

12.flip()把某一元素,求反。

13.swap. vecObj.swap(vecObj[i],vecObj[j]);

若要在容器中装一个对象而且能并检索,须要重载operator == ,例如以下:

#include <vector>

#include <iostream>

#include <stdlib.h>

#include <time.h>

//#include <getopt.h>

using namespace std;

class Obj

{

public:

Obj(int x, int y, int z)

{

this->x = x;

this->y = y;

this->z = z;

}

bool operator == (const Obj & obj)

{

if(obj.x == x && obj.y == y && obj.z == z)

return true;

return false;

}

int getX()

{

return this -> x;

}

private:

int x;

int y;

int z;

}

int main(int argc, char * argv[])

{

vector<Obj> vecObj;

Obj obj1(2,3,4);

Obj obj2(4,5,6);

vecObj.push_back(obj1);

vecObj.push_back(obj2);

vector<Obj>::iterator it =find(vecObj.begin(),vecObj.end(),Obj(2,3,4));

if(it != vecObj.end())

cout << (*it).getX() << endl;

return 0;

}

list的基本使用方法

与vector的使用方法基本同样,当中须要强调一点的是splice()函数,是指把指定段的还有一个List插入到指定位置的前面。

splice(iterator it , list &x)

splice(iterator it, list &x, iterator first)

splice(iterator it,list &x, iterator first, iterator last)

一、原型与构造函数

typdef list<T, allocator<T> >  listObj;

构造函数

list() //空

list(al) //指定allocator的空表

list(n)//n个元素,全部元素都是T()出来的

list(n,val)//n个元素,全部元素都是T(val)出来的

list(n,val,al)//同上,并指定allocator为al

list(first, last) //复制构造

list(first,last,al) //指定allocator构造

二、操作

1.resize & clear

使用resize(n)改变大小,使用resize(n, val)假设须要用T(val) 来填满空暇值。

2.front ()& back()

假设listObj很量对象,返回是一个左值函数

3.插入操作

insert(iterator it , val)

insert(iterator it, first, last)

insert(iteratot it, n, x)//插入n个x

4.移除

remove(x); //vector.erase(integrator it)

按值删

int iax[] ={3,4,5,6,6,7,8}

list<int> lObj;

lObj.insert(lObj.begin(),iax, iax + 7);

lObj.remove(6); //

按函数条件删

#include <iostream>

#include <list>

using namespace std;

// a predicate implemented as a function:

bool single_digit (const int& value) { return (value<10); }

// a predicate implemented as a class:

class is_odd

{

public:

bool operator() (const int& value) {return (value%2)==1; }

};

int main ()

{

int myints[]= {15,36,7,17,20,39,4,1};

list<int> mylist (myints,myints+8);   // 15 36 7 17 20 39 4 1

mylist.remove_if (single_digit);      // 15 36 17 20 39

mylist.remove_if (is_odd());          // 36 20

cout << "mylist contains:";

for (list<int>::iterator it=mylist.begin(); it!=mylist.end(); ++it)

cout << " " << *it;

cout << endl;

return 0;

}

当然,对于class is_odd,也能够写成

template <class T>

class is_odd

{

};

调用时,则要改成

mylist.remove_if(is_odd<int>());

5.unique操作

// list::unique

#include <iostream>

#include <cmath>

#include <list>

using namespace std;

// a binary predicate implemented as a function:

bool same_integral_part (double first, double second)

{ return ( int(first)==int(second) ); }

// a binary predicate implemented as a class:<

pre>class is_near

{

public:

bool operator() (double first, double second)

{ return (fabs(first-second)<5.0); }

};

int main ()

{

double mydoubles[]={ 12.15, 2.72, 73.0, 12.77, 3.14,

12.77, 73.35, 72.25, 15.3, 72.25 };

list<double> mylist (mydoubles,mydoubles+10);

//UNIQUE曾经必需要Sort,切记,它的内部实现是I,i+1的方式。

mylist.sort();             // 2.72, 3.14, 12.15, 12.77, 12.77,

// 15.3, 72.25, 72.25, 73.0, 73.35

mylist.unique();           // 2.72, 3.14, 12.15,

12.77

// 15.3, 72.25, 73.0, 73.35

mylist.unique (same_integral_part); // 2.72, 3.14, 12.15

// 15.3, 72.25, 73.0

mylist.unique (is_near());           // 2.72, 12.15, 72.25

cout << "mylist contains:";

for (list<double>::iterator it=mylist.begin(); it!=mylist.end(); ++it)

cout << " " << *it;

cout << endl;

return 0;

}

6.排序操作

sort(); //默认按operator <排序,从小到大

sort(pr); //pr为Functional函数

7.Merge操作

在merge操作前,须要对两个序列都用operator <排序,当然,也能够指定pr排序函数

merge(s2)

merge(s2,pr);

8.reverse()

翻转操作,把整个list翻转

deque的基本操作

一、原型与构造函数

typedef deque<T, allocator<T> > deqObj;

构造函数

deque();

deque(al);

deque(n);

deque(n,x);

deque(n,x,al);

deque(first,last);

deque(first,last,

二、操作

1.resize & clear

使用resize(n)改变大小,使用resize(n, val)假设须要用T(val) 来填满空暇值。

2.clear操作

在clear后调用deqObj.swap(deque<T,A>())是好习惯,并且也一定要这么做。

3.font(),back(),operator [],(如出边界,形为未定)at()(如出边界,抛异常),push_back(),push_front(),pop_back(), pop_front(),insert(iterator it,x),insert(iterator it,n,x),insert(iterator first,iterator last),(插入后指向刚插入的值),erase(it),删除在it指定位置的值,erase(iterator first,iterator last)删除指定区间的值(左闭右开)。这些操作与上面的操作雷同。

Set与multiset的基本操作

一、原型与构造函数

typedef set<Key, less<Key>, allocator<key> > setObj;

构造函数

set(); //空set,按pred()排序

set(pr); //声明一个空的按pr排序的set

set(pr,al); //声明一个按pr排序的集合用al分配

set(first,last)

set(first,last,pr)

set(first,last,pr,al)

操作

1.clear()

2.erase(it); erase(first, last)

3.insert(key),返回值为pair<iterator, bool> 类型,没有与插入元素同样的元素时,second为true,此时first指向新插入的元素。否则为False,first仍指向原来的元素

4.find(key)

5.lower_bound(key)

6.upper_bound(key)

7.equal_range(key),返回一个pair<iterator , iterator >(lower_bound(key), upper_bound(key))

8.count, equal_range的长度

9.key_comp,假设k1排在k2的前面,那么key_comp()(key1,key2)就为true

10.value_comp,对于set<key>对象,它与key_comp一样。

multiset

1.insert,因为insert总能成功,那么它返回的就是新元素的迭代器,而并不是pair<iteraor, bool>对象.

2.find返回第一个与key相等的迭代器。

3.equal_range将返回 [0,setObj.size())的随意长度.

4.count()将返回[0,setObj.size())的随意值。

C++容器类的简介的更多相关文章

  1. 【Flutter】容器类组件简介

    前言 容器类Widget和布局类Widget都作用于其子Widget,不同的是: 布局类Widget一般都需要接收一个widget数组(children),他们直接或间接继承自(或包含)MultiCh ...

  2. c# 容器类简介

    c# 容器类简介   C# 中主要有两类容器:一个是 System.Array 类(参阅:http://msdn.microsoft.com/library/default.asp?url=/libr ...

  3. 第15.33节 PyQt(Python+Qt)入门学习:containers容器类部件QTabWidget选项窗部件简介

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...

  4. 第15.31节 PyQt(Python+Qt)入门学习:containers容器类部件GroupBox分组框简介

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...

  5. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  6. tomcat 简介

    一,Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项 ...

  7. c++模板库(简介)

    目 录 STL 简介 ......................................................................................... ...

  8. 【c++】标准模板库STL入门简介与常见用法

    一.STL简介 1.什么是STL STL(Standard Template Library)标准模板库,主要由容器.迭代器.算法.函数对象.内存分配器和适配器六大部分组成.STL已是标准C++的一部 ...

  9. Java容器类概述

    1.简介 容器是一种在一个单元里处理一组复杂元素的对象.使用集合框架理论上能够减少编程工作量,提高程序的速度和质量,毕竟类库帮我们实现的集合在一定程度上时最优的.在Java中通过java.util为用 ...

随机推荐

  1. WinAPI——钩子函数大全3

    函数原形:LRESULT CALLBACK JournalPlaybackProc(int code, WPARAM wParam, LPARAM lParam); 参数: code:指示一个代码,被 ...

  2. VS2005下开发PPC2003和WM50编译器一些设置

    1.vs2005开发WM5时,编译器和linker的选项配合问题 链接:http://www.mivi.name/blog/index_en.php?itemid=258 首先说ARM4 ARM4T ...

  3. poj 3278 Catch That Cow (bfs)

    题目:http://poj.org/problem?id=3278 题意: 给定两个整数n和k 通过 n+1或n-1 或n*2 这3种操作,使得n==k 输出最少的操作次数 #include<s ...

  4. 斜率优化dp(POJ1180 Uva1451)

    学这个斜率优化dp却找到这个真心容易出错的题目,其中要从n倒过来到1的确实没有想到,另外斜率优化dp的算法一开始看网上各种大牛博客自以为懂了,最后才发现是错了. 不过觉得看那些博客中都是用文字来描述, ...

  5. vijos 1563 疯狂的方格取数

    P1653疯狂的方格取数 Accepted 标签:天才的talent[显示标签]   背景 Due to the talent of talent123,当talent123做完NOIP考了两次的二取 ...

  6. SharePoint 2010 出错! HTTP Error 503. The service is unavailable

    转:http://544729.blog.51cto.com/534729/464087 昨天,公司的sharepoint 2010 无法打开,提示HTTP Error 503. The servic ...

  7. javascript-实现日期大写

    <script language="javascript"> $(document).ready(function() { //定义中文数组 var chinese = ...

  8. [MySQL-1] mysql error 1101 blob/text column can't have a default value

    在MySQL Query Browser上创建一个含有TEXT类型的字段,创建不成功,报错:mysql error 1101 blob/text column can't have a default ...

  9. js中的继承2--原型继承

    一. 原型与构造函数 Js所有的函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型.这个函数包括构造函数和普通函数,我们讲的更多是构造函数的原型,但是也不能否定普通函数 ...

  10. 在LinearLayout中实现列表,列表采用LinearLayout横向布局-android学习

    不多讲直接上代码 1.Activity 对应的布局文件如下: <?xml version="1.0" encoding="utf-8"?> < ...