关于容器的各种操作
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函数就行了呵呵,还是编编就行了
(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函数就行了呵呵,还是编编就行了
相关文章推荐
- android关于SD卡、存储的各种操作
- 关于list容器与vector容器中的erase操作
- oracle中关于表的各种操作
- 简析关于Set接口的各种操作
- 关于容器map的操作代码
- 关于数据库SQL的2个结果集的各种合并操作
- 关于默认构造函数、复制构造函数、析构函数、赋值操作的各种测试探索
- 关于c++顺序容器小结(二)---基本操作
- 关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种
- 关于时间的各种操作(转载)
- 关于C++ 容器的swap操作
- 关于以string类型的容器,容器中字符串的操作
- 关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种
- 用vector、 multimap、 list容器实现好友列表的各种操作 C++
- 关于C++中各种容器
- 关于各种数据库 Insert时同时取到Id的操作
- 关于容器操作
- STL中各种容器的删除操作
- 【MySql APIs】很完整的关于怎么用各种方法连接Mysql数据库,和使用API来操作Mysql数据库的资料
- 关于递归的各种操作