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

时间: 2024-10-15 20:32:54

C++ Primer笔记 容器和算法(1)的相关文章

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

erase 删除后  返回的是删除元素的后一个迭代器位置 int main() { //怎样正确的删除全部元素 循环 int a[]={1,2,3,4,5,6,7,8,9}; vector<int> v(a,a+6); for(vector<int>::iterator it=v.begin();it!=v.end();) { it=v.erase(it); } for(vector<int>::iterator it=v.begin();it!=v.end();it+

C++ Primer 笔记——容器

1.标准库中定义了一些顺序容器,所有顺序容器都提供了快速顺序访问元素的能力. 2.如果容器的元素类型没有默认构造函数,那么在构造这个容器的时候不能只指定这个容器的数目,因为没有办法默认构造这些元素. 3.常见的一些容器操作 4.当一个容器初始化另一个容器拷贝时,两个容器的元素类型必须完全匹配,如果用一个容器的迭代器去初始化另一个容器时,只要元素类型可以转换即可. 5.当定义一个array时除了指定类型之外还要定义它的大小,array可以进行拷贝赋值. std::array<int, 3> ar

C++ Primer笔记6_STL之泛型算法

1.泛型算法: 大多数算法定义在头文件algorithm中,标准库还在头文件numeric中定义了一组数值泛型算法 只读算法: 举例: find函数用于找出容器中一个特定的值,有三个参数 int val = 10;//val为我们需要查找的值 auto result = find(vec.begin(), vec.end(), val): cout << "The value "<< val << (result == vec.end() ? &qu

C++ Primer笔记5_STL之顺序容器

1.STL(Standard Template Library) 标准模板库.从根本上说,STL是一些"容器"的集合,这些"容器"有list, vector,set,map等,STL也是算法和其它一些组件的集合.这里的"容器"和算法的集合指的是世界上很多聪明人很多年的杰作.每一个C++程序员都应该好好学习STL.大体上包括container(容器).algorithm(算法)和iterator(迭代器),容器和算法通过迭代器可以进行无缝连接. 2

C++ Primer笔记7_STL之关联容器

关联容器 与顺序容器不同,关联容器的元素是按关键字来访问和保存的.而顺序容器中的元素是按他们在容器中的位置来顺序保存的. 关联容器最常见的是map.set.multimap.multiset map的元素以键-值[key-value]对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据. set仅包含一个键,并有效的支持关于某个键是否存在的查询. pair类型 首先介绍下pair,pair定义在utility头文件中,一个pair保存两个数据成员,类似容器,pair是一个用来生

C++ Primer笔记8_动态内存_智能指针

1.动态内存 C++中,动态内存管理是通过一对运算符完成的:new和delete.C语言中通过malloc与free函数来实现先动态内存的分配与释放.C++中new与delete的实现其实会调用malloc与free. new分配: 分配变量空间: int *a = new int; // 不初始化 int *b = new int(10); //初始化为10 string *str = new string(10, ); 分配数组空间: int *arr = new int[10];//分配的

泛型算法 —— 独立于容器的算法

一:泛型算法 简介 (1)所有标准库容器都有支持递增运算符.递减运算符(++.--.== !=)这四种运算符的迭代器:string 和 vector 提供了更多的运算符(> >= < <=,以及iter+n,iter-n,iter+=n,iter-=n,iter1-iter2) (2)标准库并未给每一个容器都定义成员函数来实现排序.查找.复制等操作,而是定义了一组泛型算法(generic algorithm). (3)迭代器令算法不依赖于容器 (迭代器的知识请看 : 初始迭代器 i

C++ Primer 笔记 第三章

C++ Primer 第三章 标准库类型 3.1using声明 例: using namespace atd; using std::cin; 3.2string类型 初始化方式 string s1 默认构造函数,s1为空串 string s2(s1) 将s2初始化为s1的一个副本 string s3(“value”) 将s3初始化为一个字符串的副本 string s4(n, 'c') 将s4初始化为字符'c'的n个副本 getline读取整行文本 getline接受两个参数:一个是输入流对象和

STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

 1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) Adaptors(配接器) STL的六大组件分别是: 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Function object) 适配器(Adapter) 空间配置器(allocator):只能分配内存等 2.容器与算法 案例如下: #include<