Effective C++ (8) 顺序容器vector,list,deque
来源:互联网 发布:centos 7安装ngrok 编辑:程序博客网 时间:2024/06/05 23:53
为了定义一个容器类型的对象,必须先包含相关的头文件,即下列头文件之一:
#include <vector> #include <list> #include <deque>
所有的容器都是类模板要定义某种特殊的容器,必须在容器名后加一对尖括号,尖括号里面提供容器中存放的元素的类型:
vector<string> svec; // empty vector that can hold strings list<int> ilist; // empty list that can hold ints deque<Sales_item> items; // empty deque that holds Sales_items
将一个容器初始化为另一个容器的副本
当不使用默认构造函数,而是用其他构造函数初始化顺序容器时,必须指出该容器有多少个元素,并提供这些元素的初值。同时指定元素个数和初值的一个方法是将新创建的容器初始化为一个同类型的已存在容器的副本:
vector<int> ivec; vector<int> ivec2(ivec); // ok: ivec is vector<int> list<int> ilist(ivec); // error: ivec is not list<int> vector<double> dvec(ivec); // error: ivec holds int not double尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递一对迭代器间接实现该实现该功能。
使用迭代器时,不要求容器类型相同。容器内的元素类型也可以不相同,只要它们相互兼容,能够将要复制的元素
转换为所构建的新容器的元素类型,即可实现复制。
迭代器标记了要复制的元素范围,这些元素用于初始化新容器的元素。迭代器标记出要复制的第一个元素和最后一个元素。采用这种初始化形式可复制不能直接复制的容器。更重要的是,可以实现复制其他容器的一个子序列:
// initialize slist with copy of each element of svec list<string> slist(svec.begin(), svec.end()); // find midpoint in the vector vector<string>::iterator mid = svec.begin() + svec.size()/2; // initialize front with first half of svec: The elements up to but not including *mid deque<string> front(svec.begin(), mid); // initialize back with second half of svec: The elements *mid through end of svec deque<string> back(mid, svec.end());
回顾一下指针,我们知道指针就是迭代器,因此允许通过使用内置数组中的一对指针初始化容器也就不奇怪了:
char *words[] = {"stately", "plump", "buck", "mulligan"}; // calculate how many elements in words size_t words_size = sizeof(words)/sizeof(char *); // use entire array to initialize words2 list<string> words2(words, words + words_size);
分配和初始化指定数目的元素
(1)创建顺序容器时,可显式指定容器大小和一个(可选的)元素初始化式。容器大小可以是常量或非常量表达式,元素初始
化则必须是可用于初始化其元素类型的对象的值:
const list<int>::size_type list_size = 64; list<string> slist(list_size, "eh?"); // 64 strings, each is eh?(2)也可以只指定大小。
容器操作的特殊要求:
支持复制和赋值功能是容器元素类型的最低要求。此外,一些容器操作对元素类型还有特殊要求。如果元素类型不支持这些特殊要求,则相关的容器操作就不能执行:我们可以定义该类型的容器,但不能使用某些特定的操作。
分享到新浪微博
- Effective C++ (8) 顺序容器vector,list,deque
- c++STL之顺序容器(vector、deque、list)分析
- 由浅入深-顺序容器(vector deque list)
- C++顺序容器vector、deque、list
- 顺序容器vector、list、deque的区别
- 顺序容器list、vector、deque的优劣
- 顺序容器vector、list、deque的区别
- 顺序容器vector、list、deque(整理中)
- STL顺序容器【vector】【deque】【list】
- 顺序容器vector、list、deque的区别
- C++ 9.1 顺序容器-----vector、list、deque
- C++顺序容器vector、deque、list
- C++顺序容器vector,deque,list
- 顺序容器Vector,List,,Deque区别
- 八、STL 顺序容器 vector、deque、list
- 顺序容器vector、deque和List练习
- STL顺序容器vector,list和deque
- 顺序性容器(vector&list&deque)
- Effective C++ (3) 避免C++头文件的多重包含
- Effective C++ (4) c++中的命名空间
- Effective C++ (5) 几个关于数组的问题
- Effective C++ (6) 函数的参数传递
- Effective C++ (7) 强制类型转换
- Effective C++ (8) 顺序容器vector,list,deque
- 泛型算法
- 第一回 ,如何写 go 代码
- C++模板
- plone安装,配置,备份,转移
- 模糊聚类算法(FCM)和硬聚类算法(HCM)的VB6.0实现及
- 模糊聚类分析的实现
- 常见英语构词方法及高效的记忆方法
- 图象处理常用网站