c++学习记录
文章目录
前言
想再系统学习一下c++,搭建这个笔记架构,长期更新(btw想每天更新一下);
如果有错误地方,烦请多多指教。
在学习过程中,也希望能养成良好的代码习惯,主要就是按照华为代码风格来码代码。(良好的代码风格很重要,我们都要逐渐养成)。
一、c++学习参考
参考书籍:
《C++ primer》
《C++必知必会》
《C++范型STL原理和应用》清华大学出版社(ps:这本书是在海淀北区图书馆看到的,不错)
参考视频:
黑马扫地僧c++教程系列
侯捷老师c++教程
二、STL原理和应用
1.stl (标准模版库)理论基础
stl (standard template library,标准模版库)是惠普实验室开发的一系列软件的统称,现在主要出现再c++中。
从广义上讲,stl可以分为三大类:算法algorithm 、容器container和迭代器iterator。容器和算法可以通过迭代器无缝连接。
- 使用stl的好处
1.stl是c++的一部分,无需安装其他的软件,它被重建于编译器之内。
2.stl实现了数据结构于算法的分离,使其变得更加通用。
3.stl具有高可重用性。
4.stl是c++程序员一项不可或缺的基本技能。
2.vector
一个vector例子
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[]) {
vector<int>v1; // 容器:把你的元素copy到你的容器之中
v1.push_back(1); //迭代器相当于一个指针
v1.push_back(3); //算法是=
v1.push_back(5);
v1.push_back(3);
for (vector<int>::iterator it = v1.begin(); it != v1.end(); ++it) {
cout<<*it<<" ";
}
cout<<endl;
//算法实现了与容器的分离
cout<<"count number 3:"<<count(v1.begin(),v1.end(),3)<<endl;
return 0;
}
vector特点-最常见的容器
1.占用连续的内存空间,允许随机访问,既可以像普通数组那样用被访问元素的下标来访问,也可以使用成员函数at()来访问。
vector常见的构造函数
vector(); | 创建一个没有任何元素的空向量 |
---|---|
vector(vector&_Right); | 创建一个向量,并用right初始化该向量 |
vector(size_type count); | 创建一个大小为count的向量 |
– | – |
vector(size_typecount,const type &val ); | 创建一个大小为count的向量,该向量所有的元素都初始化为val |
测试一下上面构造函数的列表
//
// main.cpp
// stl
//
// Created by ml123 on 2021/2/15.
//
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int>::iterator v1_it, v2_it, v3_it, v4_it, v5_it, v6_it;
vector<int>v1(3); //创建一个长度为3,初始值为0的int型向量
cout<<"v1:";
for (v1_it = v1.begin(); v1_it != v1.end(); ++v1_it) {
cout<<" "<<*v1_it;
}
cout<<endl;
//创建一个长度为5,初始值为2的int类型的向量
vector<int>v2(5,2);
cout<<"v2= ";
for (v2_it = v2.begin(); v2_it != v2.end(); v2_it++) {
cout<<" "<<*v2_it;
}
cout<<endl;
//创建一个int类型的向量,并用v2初始化之
vector<int>v3(v2);
cout<<"v3= ";
for (v3_it = v3.begin(); v3_it != v3.end(); v3_it++) {
cout<<" "<<*v3_it;
}
cout<<endl;
//创建一个int类型的向量,并用v2部分元素初始化他
vector<int>v4(v2.begin() + 1,v2.begin() +3);
cout<<"v4= ";
for (v4_it = v4.begin(); v4_it != v4.end(); v4_it++) {
cout<<" "<<*v4_it;
}
cout<<endl;
return 0;
}
vector读向量元素的操作
reference front();const_reference front() const; | 返回第一个元素 |
---|---|
reference back();const_reference back() const | 返回最后一个元素 |
referennce operator[](size_type pos); | 返回由pos指定的位置上的元素 |
clear() | 从容器中删除所有元素 |
reference at(size_type pos); | 返回由pos指定的位置上的元素 |
erase(postion) | 删除指定位置上的一个元素 |
erase(beg,end) | 删除beg到end -1上的元素 |
insert(postion ,elem) | 将elem元素插入到postion位置 |
insert(postion,beg,end) | 将从beg到end-1之间所有元素的靠别插入到postion指定的位置上 |
pop_back() | 删除最后一个元素 |
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>intVector;
int i;
//从尾部开始插入需要插入的元素
intVector.push_back(1063);
intVector.push_back(765);
intVector.push_back(208);
intVector.push_back(435);
//使用下标读取数据
cout<<"line 1:at函数()";
for (i = 0; i < intVector.size(); ++i) {
cout<<intVector.at(i)<<" ";
}
cout<<endl;
cout<<"[]";
for (i = 0; i <intVector.size(); ++i) {
cout<<intVector[i]<<" ";
}
cout<<endl;
//还有其他在此不与赘述
return 0;
}
代码如下(示例):
vector描述自身情况的成员函数
sizeof_type capacity()const; | 返回当前容纳元素的个数 |
---|---|
bool empty() const ; | 若容器为空,则返回true |
size()const | 返回容器当前包含元素的个数 |
– | – |
size_of max_size() const | 返回可以输入到容器的元素的最大数目 |
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v1;
cout<<v1.empty()<<endl;
vector<int>::size_type i;
v1.push_back(1);
i = v1.size();
cout<<"向量长度为:"<< i<<endl;
cout<<"目前向量空间的长度为:"<<v1.capacity()<<endl;
i = v1.max_size();
cout<<"目前向量空间的长度为:"<<i<<"."<<endl;
return 0;
}
c++ 11后改进的方面
- 使用{}对vector进行初始化
vector<int>v1 = {1,2,3};
或者
vector v1 = {1,2,3};
- 简单使用for循环对其进行简单的操作
//引用传递并进行运算操作
for(auto &i:v1)
i*=i; //遍历元素惊醒平方运算并返回结果
//例如进行值传递,并操作
for(auto i:v1)
cout<<i<<Endl;