c++学习记录之STL

c++学习记录



前言

想再系统学习一下c++,搭建这个笔记架构,长期更新(btw想每天更新一下);


如果有错误地方,烦请多多指教。
在学习过程中,也希望能养成良好的代码习惯,主要就是按照华为代码风格来码代码。(良好的代码风格很重要,我们都要逐渐养成)。

一、c++学习参考

参考书籍:
《C++ primer》
《C++必知必会》
《C++范型STL原理和应用》清华大学出版社(ps:这本书是在海淀北区图书馆看到的,不错)

参考视频:
黑马扫地僧c++教程系列
侯捷老师c++教程

二、STL原理和应用

1.stl (标准模版库)理论基础

     stl (standard template library,标准模版库)是惠普实验室开发的一系列软件的统称,现在主要出现再c++中。
    从广义上讲,stl可以分为三大类:算法algorithm 、容器container和迭代器iterator。容器和算法可以通过迭代器无缝连接。

  1. 使用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;

Vector仿真


总结

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值