C++ Primer笔记 容器和算法(1)

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

 

你可能感兴趣的:(C++)