第九章
顺序容器
容器类型 | 介绍 |
---|---|
vector |
可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。 |
deque |
双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。 |
list |
双向链表。只支持双向顺序访问。在list 中任何位置进行插入/删除操作速度都很快。 |
forward_list |
单向链表。只支持单向顺序访问。在链表任何位置进行插入/删除操作速度都很快。 |
array |
固定大小数组。支持快速随机访问。不能添加或者删除元素。 |
string |
与vector 相似的容器,但专门用于保存字符。随机访问块。在尾部插入/删除速度快 |
习题
9.4编写函数,接受一对指向vector<int>
的迭代器和一个int
值。在两个迭代器指定的范围中查找给定的值,返回一个布尔值来指出是否找到。
#include <iostream> #include <string> #include <vector> using namespace std; bool FindANumber(int i, vector<int>::iterator v1, vector<int>::iterator v2) { vector<int>::iterator iter = v1; for(;iter != v2; ++iter) { if(*iter == i) { cout << "find number:" << i << endl; return true; } } cout << "not find number" << endl; return false; } int main() { vector<int> vi; for(int i = 0; i < 10 ; ++i) { vi.push_back(i); } /* for(auto a : vi) cout << a << endl; */ FindANumber(5, vi.begin(), vi.end()); return 0; }
9.5重写上一题的函数,返回一个迭代器指向找到的元素。注意,程序必须处理未找到给定值的情况。
vector<int>::iterator FindANumber(int i, vector<int>::iterator v1, vector<int>::iterator v2) { vector<int>::iterator iter = v1; for(;iter != v2; ++iter) { if(*iter == i) { cout << "find number:" << i << endl; return iter; } } cout << "not find number" << endl; return v2; }
9.9
vector<int> v1; const vector<int> v2; auto it1 = v1.begin(), it2 = v2.begin(); auto it3 = v1.cbegin(), it4 = v2.cbegin();
it1
是 vector<int>::iterator
it2
,it3
和 it4
是 vector<int>::const_iterator
9.14编写程序,将一个list
中的char *
指针元素赋值给一个vector
中的string
。
list<const char*> l = {"hi", "c++"}; vector<string> vc; vc.assign(l.begin(), l.end());