C++ 容器和算法(1)
“泛型算法”:
1. 算法可以作用于不同的容器类型。
2. 容器容纳多种不同类型元素
顺序容器: vector list deque(全称double-ended queue)
适配器: stack queue priority_queue
定义: vector<string> svere;
C c(b,e)当[b,e) 左开右闭之间的元素。
C c(n,d)初始化n个d
复制构造 vector<int> ivec; vector<int> ivec2(ivec)
利用迭代器传递不同的类型容器之间的数据
Vector<string>::iteratormid=svec.begin()+svec.size()/2;
Deque<string> front(svec.begin(),mid);
什么类型可以做容器的元素类型( 可复制,可赋值) //引用不行 IO也不行
测试列子:
Vector<Foo> empty;
Vector<Foo> bad(10);
Vector<Foo> ok(10,1);
其中Foo 无默认构造函数 , 但有int型形参构造函数.
class Foo { public: int data; Foo(int a){this->data=a;} }; int main() { //vector<Foo> foo1(10,1);//对 创建个值为的foo1顺序表 //vector<Foo> foo2(10); //错 没有默认无参构造函数 //vector<Foo> foo3; //对 根本没有调用任何构造函数 //Foo f();//像是声明了一个函数 这可不是对象实例化哦因为没有f()这个构造函数 Foo f;//直接报错因为没有无参构造函数 //Foo *f=new Foo();//报错同上 //Foo *f=new Foo;//报错同上 getchar(); return 0; }
二维嵌套
Vector< vector<string> >lines; // > >之间一定要加空格,不然会当成>>位移运算符
迭代器和迭代器范围
Vector 和deque 迭代器可以 iter+n iter-n
List不能随机访问,不能作比较 < >之类的
迭代器范围
End指向最后一个元素的下一个位置
[begin,end)
Size_type iterator const_iterator
c.begin() c.end() c.rbegin()翻转 c.rend()
c.push_back(x) c.insert(p,t) c.push_front(x)(只能list和deque) c.insert(p,n,t)
更新后注意重置迭代器
While(first!=v.end())
{
First=v.insert(++first,42);
++first;
}
c.resize(n,t) 调整为n,用t来补充不够的
list<int>::referencelast=*list.begin();
last为引用
c[n] c.at(n) 可以用(vector deque)
c.pop_back() 删除容器c的最后一个元素
c.pop_front() 只适用于list deque
P286