您的位置:首页 > 其它

关于容器的各种操作

2011-09-15 23:45 232 查看
对于容器有增,删,查,改这几种操作,对于不同的容器有不同的操作

(1)顺序容器:

1.插入元素:对于c.push_back(t)和c.insert(p,t)顺序容器都可以操作,c.push_front(t)只适用于list和deque 容器,vector不允许在首部插入元素,insert是通用的算法。

2.访问元素:c.back(),c.front()返回第一个和最后一个元素的引用,另一种返回引用的办法是对迭代器进行解引用。c
,c.at(n)只适用vector和deque容器

3.删除元素:使用c.erase(),c.clear(),c.pop_back(),c.pop_front()(只适用list和deque),对于使用c.erase()使用一个要删除元素的迭代器,先使用find算法返回一个迭代器,然后再删除元素

4.赋值操作:使用c1=c2,c1.swap(c2),c.assign(b,e),当容器的类型相同而且元素的类型也形同,可以使用=操作符,在不同容器或者相同的容器,元素可以发生兼容,可以使用assign操作符,而对于swap容器,容器和容器的元素都必须 相同,能再常数时间内完成,而且迭代器不会失效,而且指向相同的元素,只是存在于不同的容器中而已

5.对于string这个特殊的容器,写几点只是用string的操作

(1)substr操作提取字串如:

string s("zhangzheng");

string s1=s.substr(6,5);//在指定位置提取字串

(2)append()函数在string的末尾添加元素如:

string s("zhangzheng");

s.append("zhangran");

相当于以下:

s.insert(s.size(),"zhangran");

(3)repalce()函数,将指定与元素替代成指的元素如:

s.replace(11,3,"zhangzheng");

相当于

s.erase(11,3);

s.insert(11,"zhangzheng");//可以插入更长或者较短的元素

(4)还有一些繁琐的函数如:find(),compare()函数以及各种变形,用时再看

(2)关联式容器:

插入元素(对于map):

1.使用下标操作符如:

map<string,int>word_count;

word_count["zhangzheng"]=1;

值得注意的是当元素不存在时将会直接插入一个元素,使用map迭代器访问元素时返回的是value_type类型的值,包括const key_type和mapped_type类型,而使用下标操作符则返回一个mapped_type类型的值

2.使用insert操作符

使用此种方法更加的紧凑而且没有副作用如:word_count.insert(map<string,int>::vlaue_type("zhang",1));里面的形参必须是value_type类型的其实就是pair类型的同义词,但是此种形参过于复杂,可以使用typedef简化一下如下:

typedef map<string,int>::value_type valType;

word_count.insert(valType("zhang",1));

适当的简化了,但还有一种更加简便的方法,那就是使用make_pair()如:word_count.insert(make_pair("zhang",1))

含有一个或者一对迭代器并不能说明什么,但带有一个键—值pair形参的将会返回一个值,包括迭代器和一个bool值的pair对象,没有插入则是false,正确插入则是true,迭代器则是插入的位置

访问元素:

由于直接使用下标操作符有一定的副作用,有两个函数可以辅佐查找,等确定以后再访问也不迟:count和find如:

int occurs=0;

if(word.count("zhang"))//注意count的返回值是size_type 类型的

occurs=word_count["zhang"];

//////////////////////////////////////////

对于set有不同的定义

插入元素(set),由于set不支持下标操作,所以必须使用insert函数才能加入元素如:

set<string>set1;

set1.insert("the");

set1.insert("zhang");

带有一个参数的函数也是返回一个pair对象

访问元素(set):直接使用count和find函数在解引用就行了

////////////////////////////////////////////////

对于multimap和multiset

插入和删除:使用insert和erase就行了

访问方式:当然可以使用经典的count和find函数,担忧更简便的方法,使用面向迭代器和equal_range函数就行了呵呵,还是编编就行了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: