c++ -learn
1.关于vector
(1)vector的初始化赋值
vector<int> a = {1,2,3,4}; //正确
vector<int> a{1,2,3,4}; //正确
vector<int> a(4) = {1,2,3,4}; //错误
//但是要是想要一个空的 就得
vector<int> a(4);
vector<int> a(10,-1); //初始10个整形全是-1
也可以下标赋值
vector<int> a(5,-1);
a[0] = 15;
也可以用一个vector给另一个初始化
vector a = {1,2,3};
vectorb(a);
(2)vector的灵活性
作为函数返回值可以相当于直接返回一个数组
vector<int> text()
{
return {1,2,3,4};
}
这要是用c的话返回数组得靠指针。
2.迭代器
初始时候确实觉得迭代器与指针很类似;
像用
auto a = vector.begin(),
auto b = vector.end().
就可以直接通过 a 来引用第一个元素这里就和指针很像。
但是指针和迭代器不是一个东西
(1) 迭代器不是指针,是类模板,表现的 像 指针。他只是 模拟了指针的一些功能,通过 重载了指针的一些操作符,->,,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,–等操作;
vector<string> a = {"aa","bb","cc","dd"};
auto it1 = a.begin();
auto it2 = a.end();
cout << *it1 <<endl;
it1 ++;
cout << *it1 << endl;
就是从 ”aa" 到 ”bb"
2)迭代器返回的是 对象引用而不是对象的值,所以cout只能输出迭代器使用 *取值后的值而不能直接输出其自身。
这里你 cout << it1 ; 就会报错。
想要知道迭代器具体是什么类型可以通过
#include <typeinfo>
cout << typeid(it1).name() << endl;
3.关联容器map有关
(1)pair类型
我总结pair类型就是一个容器版的auto。
把两个数据合成一组数据的需要就可以用到pair.
小例子
pair<string ,string>author {"james","joke"};
cout << author.first << endl;
cout <<author.second << endl;
(2)map类型。
定义:
就是一个一对一的数据存储
map < key_type,mapped_type>;
map <string ,int> : : key_type a1; // a1 是一个string
map <string,int> : :mapped_value a2; //a2是一个int
map<string,int> : : value_type a3; //a3是一个pair<const string,int>
向map中插入元素。
map [ key_type ] = mapped_type ; // 下标插入,map会遍历所有的元素,要是有key_type 就把它的值赋为mapped_value,要是没有就重新新增。
map<string,int> a;
a["aa"] = 5;
a.insert({"bb",7});
a.insert(make_pair("cc",9));
a.insert( pair<string,int>("dd",11) );
a.insert( map<string,int> :: value_type("ee",13) );
cout << a["ee"] << endl;
在map中查找元素的操作。
map.cout( k ); //返回关键字等于k 的元素的数量,对于不允许重复关键字的容器,返回值永远是0或者1
4.sort等函数STl
这里是引用这是一个讲解sort用法例子的网站
5.链表未学习
6.递归
对递归的思想要明白
深度优选搜索DFS ,要明白思路,可着一个节点搜索下去,
广度优先搜索BFS,解决最短路径问题