想一想,C++貌似和C没有很大的区别,甚至可以用C的任何代码,除了引用不要和指针混淆。
总结一下目前已知的C艹和C的我写代码时候遇到的区别:
cout << "" << endl;cin >> "";
STL(Standard Template Library)标准模板库!!再也不用我在C里面手打一堆了!从表面上来说,STL就是一些“容器“和“算法”的集合。其实编程不就是数据结构加算法么?容器就是将一些数据结构封装了,可以直接进行调用。
列举STL的所有头文件:、、、、、、、、、、、和。
必须一个一个好好学嗷,芜湖~
(不学STL的C++就不是完整的C艹)
简单的stl入门:
1、Container
是一种数据结构,也是stl中几乎是最重要的,包含了list,vector,stack,queue等。可以使用由容器类输出的迭代器。(这里一环扣一环)
2、Iterator
迭代器,是一种特殊的指针,它提供了访问容器中对象的方法,至于在程序设计中,它扮演了容器和算法之间的胶合剂,可以安全地对容器内容进行操作,或是进行算法模板的使用。(调用容器进行算法的构建,容器只是一个数据结构,即对象)
3、Algorithm
算法,是一类常用的算法模板,就可以对容器进行操作,同时其开放性也让算法类本身可以针对数组或是自定义结构体等结构进行直接的操作。
4、Function object
仿函数,抽象来说是一种行为类似函数,我们可以理解为一种高级的,重载了()操作符的结构体与类。/有点不懂/
5、Iterator Adaptor
迭代适配器,是一种用来修饰容器或者仿函数的接口,它使得适配器能够让算法以逆向模式、安插模式工作,甚至可以与流配合。对容器起到非常大的辅助作用,同时他还将迭代器进行了更高级别的抽象。
6、allocator
是负责空间的配置与管理,重点就是对容器的空间申请和空间释放进行管理,可以理解为C的malloc和free函数,C++的new和delete关键字。动态内存管理。
1、概念
可以翻译为向量,或向量数组,至于为什么以向量命名,可以理解为一维空间也是存在向量的。
Vector是最简单的容器,就像数组一样,向量使用连续的存储位置作为元素,这就意味着它们的元素可以使用常量指向其元素的偏移来访问,与数组一样有效。但与数组不同,他们的大小可以动态变化
,其存储由容器自动处理。(是动态的!!!!)
2、相关头文件->#include
3、初始化->vector
vector<int> v1; //创建一个空的向量v1
vector<int> v2(10); //创建一个向量v2,其已开辟10个元素的空间,相当于int v[10];
vector<int> v3(10,5); //创建一个向量v3,其已开辟10个元素的空间并全部赋值为5
vector<int> v4(v3.begin(),v3.end()); //创建一个向量v4,其内容为向量v3的内容
vector<int> v5(v4); //创建一个向量v5,其包含了v4的全部内容
4、迭代器
是安全访问器,不像指针,可能造成内存访问错误,里面有很多预防错误的方法和多种访问方式。在stl使用中一般用迭代器对容器进行访问,因此创建容器的迭代器。
遍历代码:
vector<int> v; //创建一个向量v
vector<int>::iterator it; //C98标准
for(it=v.begin();it!=v.end();it++){
cout<<*it<<' ';
}//这不就是指针的形式么,还挺贴心的,为我们这些C老用户着想
下标形式:
for(int i=0;i<v.size();i++){
cout<<v[i]<<' ';
}
5、常用接口(此处没有全部列出)
首先,我们使用vector
预先创建了一个向量
void push_back(const value_type& val);
v.push_back(10); //插入一个数据10
v.pop_back();
iterator insert (iterator position, const value_type& val);
void insert (iterator position, size_type n, const value_type& val);
template
void insert (iterator position, InputIterator first, InputIterator last);
v.insert(v.begin(),10); //在向量最前端插入数据10
v.insert(v.begin(),5,20); //在向量最前端插入5个数据20
vector<int> k(2,50); //创建一个新的向量k,其拥有2个元素内容均为50
v.insert(v.begin(),k.begin(),k.end()); //在向量v最前端插入向量K的全部内容
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
v.erase(v.begin());//删除第一个元素
v.erase(v.begin(),v.begin()+4);//删除从第一个开始后的四个元素,包括第一个
void clear();
v.clear();
//显然这的v都利用vector的类方法,很实用啊
size_type size() const;
cout << v.size() << endl;//输出数据大小
size_type capacity() const;
vector<int>v(3,10)//创建默认有3个值为10的元素的向量v
v.insert(v.begin(),10,20);//在向量最前端插入10个值为20 的数据
v.erase(v.begin(),v,begin()+4);//删除从第一个开始后的四个元素
cout << v.size() << endl;//输出数据大小
cout << v.capacity() << endl;//输出容器大小
size_type max_size() const;
vector<int> v(5,10);//创建默认有五个值为10的元素的向量v
cout << v.max_size() <<endl; //输出可以创建的vector空间的最大值。