STL学习篇:“投机取巧”地学习

  这两天一直在学习STL,先大致说一下我的学习的方法:最初是大致看一遍STL的初级入门书,然后再过一遍网上大牛讲的视频,一边跟着操作,不懂的一般就在网上一直找!看看大牛发的帖子!基本学习方法就是这样啦,总的来说谁也不可能避免实际操作这一环节,因为我们都是要学以致用的!也许有人学习新知识比较快,可以不看视频之类的,这个我只想说自己根据自己的情况来定吧!不瞎扯啦,我也只只是一个小小的初学者,就说说这两天碰到的问题吧!

  大牛的视频中,每次都是要包含需要的头文件,然后就是选择合适的容器,进行初始化,输出,进而进行相应方法的讲述!基本就是这样一个流程,这里不是想说大牛的讲课方法有问题,这个绝对科学,因为每节课讲述的内容关联性不是很强,并且比如某人是初学者只是想了解一些章节,那么这个方法就适合任意一个人!大牛一直说,还可以加深记忆,刚开始学就这样听着确实挺好的!但是后来,因为这些操作都比较常规,基本已经熟练掌握了,就是打字速度跟不上大牛的节奏,所以在这些普通操作中得暂停一下,跟上节奏,心里小小略感不爽!所以,我就琢磨地将初始化数据操作打印输出操作,写成模板函数,放入自定义的头文件中,然后直接调用就是!下面是具体操作:

  对了,这里还得小小强调一下,这样确实用得爽,但是感觉肯定有人这样用过,并且这里应该有些门路!我自己就知道,这里涉及的知识点有C++程序编译方式、头文件的书写和调用等,自己用还行,但是当要写出来的时候就得注意,确实得注意了,这也是平时学习养成的良好学习习惯,而不是只是单纯为了写出来才去查看!这些知识点大家自己去科普哈,园中有大拿解释,我也收藏了几篇!大家有兴趣可以去看看!

  这里总结一下,以这样的方式写需要注意的问题:

  • c++语言支持“分别编译”到底是怎么回事
  • 头文件书写一般只放声明,但是有特殊情况,调用的时候怎么防止重复调用,具体应该怎么写等
  • 调用的时候写头文件的时候可能会碰到绝对路径相对路径的概念

  程序功能:以容器vector为例,实现插入1~9的数据,并输出:

  主函数如下:

 1 #include<algorithm>
 2 #include<functional>
 3 #include<iterator>
 4 //相对路径的写法,包含自定义的头文件
 5 #include"..\..\include\smallTools.h"
 6 
 7 using namespace std;
 8 
 9 int main()
10 {
11     vector<int> ivec;
12 
13     InitData(ivec, 1, 9);
14 
15     print(ivec);
16 
17     return 0;
18 }

  头文件的具体实现:

 1 #ifndef WaHaHa
 2 #define WaHaHa
 3 //使用头文件保护符来防止重复包含
 4 #include<iostream>
 5 #include<vector>
 6 
 7 template <typename elementType>
 8 void print(elementType& elem)
 9 {
10     for (elementType::iterator iter = elem.begin(); iter != elem.end(); ++iter)
11     {
12         cout << *iter << " ";
13     }
14     cout << endl;
15 }
16 
17 template <typename elementType>
18 void InitData(elementType& elem, int b, int e)
19 {
20     //初始化插入数据
21     for (int i = b; i <= e; ++i)
22     {
23         elem.push_back(i);
24     }
25 }
26 
27 #endif
头文件的实现

  因为这里涉及的是模板函数,所以就直接将函数方法的实现也放进来啦!我还想着如果只是学习的话,在头文件的包汉中将常用的几个容器头文件都写进来,省的主函数里面再去写,因为我们初学者写的程序比较小而不是特别复杂!这个确实方便,但是心里老是感觉怪怪的。。。

  程序运行结果及文件分布截图:

  好了,上述所说的也需要大家灵活应用,比如说上面的插入数据实际上是用push_back方法实现,有时候需要insert方法或者push_front方法,那大家就需要更改或者再定义一个函数!就举这一个例子,其余不完善的也是一样,自行解决哈!基本想说的也就这么多啦!如果上述描述哪里有问题,请大家在下方评论指出,谢谢!!!

posted @ 2015-08-18 17:32  ljj江江  阅读(619)  评论(0编辑  收藏  举报