C++——有关STL的概述(出现、构成、应用)

目录

1、STL的出现

2、STL的构成

3、 理解测试代码

4、STL的应用(笔试题) 

(1)一般做题思路

(2)用STL解决 

1、STL的出现

c++中诞生STL是:为了建立数据结构算法的一套标准,并且降低其间的耦合关系以提高各自的独立性、弹性、交互操作性(相互合作性)。

  • STL称为标准模板库,容器(类模型)和算法(函数模板)
  • 三大组件:容器、算法、迭代器

仿函数(包含的一个内容)

  • #include<vector>//模板的头文件
  • #include<algorithm>//算法的头文件
  • #include<iterator>//迭代器的头文件

2、STL的构成

①容器——vector、stack、queue、list、set(集合)、map(映射)、multiset...
                   存储元素

  • 序列式容器:可序群集,
  • 关联式容器:已序群集,元素位置取决于特定的排序准则和插入顺序

②算法——copy、sort、find、find_if、count、count_if、swap...
                   操作元素


③迭代器:容器和算法的粘合剂,可以将它认为指针
用迭代器将容器中的元素访问出来,然后通过算法来操作。

类似:数组(容器)、算法(排序)、迭代器(指针)


④仿函数称为函数对象(类似于函数的对象),将它放在当前的算法中,
          可以将算法的功能得以扩展。
 

3、 理解测试代码

void print(int n)
{
    cout << n << " ";
}

int g_sum = 0;
void sum(int n)
{
    g_sum+=n;
}

template<class T>
class Print
{
public:
    void operator()(T n)
    {
        cout << n << " ";
    }
};



int main()
{
    int num[5] = { 1,2,3,4,5 };
    int numdest[5];
    copy(num, num + 5, numdest);

    vector<int> vv1;//空对象
    vector<int> vv2(5);//有五个0
    vector<int> vv3(4, 9);//有4个9
    vector<int> vv4(num, num + 5);//int类型的区间
    vector<int> vv5(vv4.begin(), vv4.end());//迭代器类型的区间
    vector<int> vv6(vv3);
    vector<int> vv7;
    vv7 = vv2;
    int i;
    vv4[3] = 20;//赋值为20,如果没有赋值就不能用
    for (i = 0;i < vv4.size();i++)
        cout << vv4[i] << " ";//对象[]重载
    cout << endl;
    vv1.push_back(1);
    vv1.push_back(2);
    vv1.push_back(3);
    vector<int>::iterator iter;//迭代器(iterator)指向vector <int>类型
   // iter++;//指向下一个元素
   
    //①begin是指向第一个元素,end是指向最一个元素的下一个
    for (iter = vv1.begin();iter != vv1.end();iter++)
        cout << *iter << " ";//重载*
    cout << endl;

    //②front是指向第一个元素,back是指向最后一个元素
    cout << "fornt:" << vv1.front() << endl;
    cout << "bakc:" << vv1.back() << endl;
    cout << "assign:" << endl;

    vv1.assign(5, 6);//用5个6给vv1重新赋值
    vv1.assign(num, num + 5);
    vv1.assign(vv4.begin(), vv4.begin() + 3);

    cout << "用copy实现" << endl;
    copy(vv4.begin(), vv4.end(),ostream_iterator<int>(cout," "));
    cout << endl;

    cout << "用for_each实现" << endl;
    for_each (vv4.begin(), vv4.end(), print);
    cout << endl;

    for_each(vv4.begin(), vv4.end(), Print<int>());
    for_each(vv4.begin(), vv4.end(),sum);
    cout << "g_sum=" << g_sum << endl;

    vv1.at(2) = 50;//把vv1[2]的值改成50
    cout << "at:" << "[]" << vv1.at(2) << endl;//vv1[1]

    vv1.clear();//清空
    cout << "vv1.size=" << vv1.size() << endl;

    vv4.emplace(vv4.begin(), 100);
    vv4.emplace_back(200);

    vv4.erase(vv4.begin() + 2, vv4.begin() + 4);//前闭后开的区间
    vv4.erase(vv4.begin());

    vv4.insert(vv4.begin(), 5, 10);
    vv4.insert(vv4.begin() + 4, num, num + 5);
    vv4.push_back(300);
    vv4.push_back(400);
    vv4.push_back(500);

    vv4.swap(vv1);//vv4和vv1的值交换

   /* list<int>::iterator iter1;
    iter1++;*/

    //int* p = num;*p++

    

} 

4、STL的应用(笔试题) 

题目:

从标准输入读取n个整数,并将他们存储在一个动态分配的数组中,进行排序排完序后将结果输出。 

(1)一般做题思路

思路:(三个步骤)

怎么读取?——动态分配数组——排序

①读取用scanf
while(1==sacnf("%d",&a));
int sacnf("",&);scanf的返回值是成功读取的个数,
scanf("%d%d%d",&a,&b,&c)//

#if 0
//举例
int main()
{
    int a, b, c;
    int n = scanf_s("%d%d%d", &a, &b, &c);
    cout << n << endl;
}
#endif

②动态分配数组
malloc、realloc(可以扩大到..,可以缩小到..)
void *realloc(void*,size)

③sort排序

int num[];//是静态数组,无论括号里写多少都是错的。
gets()是读取字符串的

(2)用STL解决 

//用STL解决问题
int main()
{
    vector<int> vv;//vector是类模板,是容器
    copy(istream_iterator<int>(cin),istream_iterator<int>(),
        back_insert_iterator<vector<int>>(vv));
    sort(vv.begin(), vv.end(), greater<int>());
    copy(vv.begin(), vv.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
}

如有错误,敬请指正。

您的收藏与点赞都是对我最大的鼓励和支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sweep-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值