C++学习——看书

C++学习——看书,第1张

C++学习——看书 《算法竞赛与入门经典》

5.1 从C到C++

本小节主要介绍了C与C++的区别,以及为什么会有这样的区别

(因为C++可以封装函数,可以设置一个模板,传参的方式可以不同,还有新的类型string....)

概述:5.1.1讲了C++的头文件,5.1.2讲了引用——一种区别于C传值(by value)方式的传引用(by reference)方式,5.1.3讲了字符串string类型。

5.1.4 再谈结构体

C++的结构体区别于C可以拥有成员函数,相当于“封装”

struct add{
    int sum(int a,int b)
    {
        return a+b;
    }
};

int main()
{
    int n;
    struct add ad;
    n=ad.sum(1,2);
    printf("n=%d",n);
    return 0;
}

5.1.5 模板-template

拓展:c++中的template理解

函数带模板

-设计一个sum函数,使它可以计算任意类型的数组的和(包括结构体):

template 
T sum(T *begin,T *end)
{
    T*p;
    T ans=0;
    for(p=begin;p!=end;p++)
                ans=ans+*p;
    return ans;
}

int main()
{
    double a[5]={1.6,2.77,3.3,4.7,5.3};
    int b[5]={1,2,3,4,5};
    
    cout< 

结构体和类(class)也可以是带模板的。

模板其实很少用,但是它可以帮助我们更好地去理解STL,以及为什么C里面没有STL

小结:成员函数以及模板都体现出C++是一个面向对象的语言

5.2 STL初步

5.2.1 排序和检索:提到了 sort、lower_bound(查找)、unique(删除有序数列中的重复元素)函数

5.2.2  不定长数组vector

UVA 101 木块问题

题目链接:The Blocks Problem

分而治之:

1.检测非法指令:判断a和b是否在同一堆
2.检测输入所对应的指令,并跳转相应的功能,遇见quit则结束
3.归位功能:在“1”之后执行
4.移位功能:可以对单块和堆进行 *** 作
5.打印功能

疑问:

假如我把v1的数全部给了a2,那为什么减少容量的时候写的是v1.resize(h1),而不是v1.resize(h1-1)。

因为我得到的h1是元素的具体位置,它和数组一个原理,实际上的长度是它加上1

#include
#include
#include
#include
using namespace std;

const int maxn = 30;
vector v[maxn];
int n;

//找到所在位置,所在高度
void FindBlock(int a,int& p,int& h)//返回p,h的地址
{
    for(p=0; p>n;
    for(int i=0; i>s1)
    {
        if(s1=="quit")
            break;
        cin>>a>>s2>>b;
        int pa,pb,ha,hb;
        FindBlock(a,pa,ha);
        FindBlock(b,pb,hb);
        if(pa==pb)
            continue;
        if(s1=="move")
            MoveBack(pa,ha);
        if(s2=="onto")
            MoveBack(pb,hb);
        MoveOn(pa,ha,pb);
    }
    Cout();
}

拓展1:continue 的用法详解

拓展2:C++ vector的基本 *** 作汇总

5.2.3 集合:set

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5691302.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存