STL初探

今天上午老总布置了任务,竟然要我在半个月内完全接手业务,难度好大,没办法,尽量吧

以前都是用VC6.0的环境,从今天起要改用.NET了,竟然还要涉及到STL。My God,这个名词我第一次听说还是一个月前的一本程序员面试宝典上呢,而今竟然就要用到了, 无奈之下只好立刻学习!

编译环境安装完毕,从网上搞了个STL简介,先初窥堂奥吧 ,网址这里贴出来,希望大家也都能从中得到帮助(http://docs.huihoo.com/gnu/linux/stl.html)。

现在我的概念中STL其实和VC、VB里面那些控件是差不多的,都是一些集成好的方法和属性的集合(可能不准确哦,只是我个人现在的理解)。STL就是Standard Template Library,标准模板库,从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。STL的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用这些现成的组件。STL现在是C++的一部分,因此不用额外安装什麽。它被内建在你的编译器之内,你可以直接使用。

这里我参考上面的文章用STL的list来做了个小小的程序,来看看到底怎么使用STL?

STL容器可以保存对象,内建对象和类对象。STL算法是标准算法,我们可以把它们应用在那些容器中的对象上。STL iterator就象是容器中指向对象的指针。STL的算法使用iterator在容器上进行操作。Iterator设置算法的边界 ,容器的长度,和其他一些事情。你可以通过调用容器的成员函数begin()来得到一个指向一个容器起始位置的iterator。你可以调用一个容器的 end() 函数来得到过去的最后一个值(就是处理停在那的那个值)。 这就是STL所有的东西,容器、算法、和允许算法工作在容器中的元素上的iterator。 算法以合适、标准的方法操作对象,并可通过iterator得到容器精确的长度。一旦做了这些,它们就在也不会“跑出边界”。 还有一些其他的对这些核心组件类型有功能性增强的组件,例如函数对象。我们将会看到有关这些的例子,现在 ,我们先来看一看STL的list。

定义一个list

我们可以象这样来定义一个STL的list:

 
#include <string>
#include <list>
using namespace std;
int main (void) {
  list<string> Milkshakes;
}

    这就行了,你已经定义了一个list。简单吗?list<string> Milkshakes这句是你声明了list<string>模板类 的一个实例,然后就是实例化这个类的一个对象。但是我们别急着做这个。在这一步其实你只需要知道你定义了 一个字符串的list。你需要包含提供STL list类的头文件。

【注意】上述所说的文章中没有using namespace std;语句,而使用STL这一句是必须加上的哦,千万不要生搬硬套,以免走弯路!

现在我们有了一个list,我们可以看实使用它来装东西了。我们将把一个字符串加到这个list里。有一个非常 重要的东西叫做list的值类型。值类型就是list中的对象的类型。在这个例子中,这个list的值类型就是字符串,string , 这是因为这个list用来放字符串。

 


I使用list的成员函数push_back和push_front插入一个元素到list中
 
#include <string>
#include <list>
int main (void) {
  list<string> Milkshakes;
  Milkshakes.push_back("Chocolate");
  Milkshakes.push_back("Strawberry");
  Milkshakes.push_front("Lime");
  Milkshakes.push_front("Vanilla");
}

We now have a list with four strings in it. The list member function push_back() places an object onto the back of the list. The list member function push_front() puts one on the front. I often push_back() some error messages onto a list, and then push_front() a title on the list so it prints before the error messages. 我们现在有个4个字符串在list中。list的成员函数push_back()把一个对象放到一个list的后面,而 push_front()把对象放到前面。我通常把一些错误信息push_back()到一个list中去,然后push_front()一个标题到list中, 这样它就会在这个错误消息以前打印它了。

 

用for循环来处理list中的元素

    我们想要遍历一个list,比如打印一个中的所有对象来看看list上不同操作的结果。要一个元素一个元素的遍历一个list, 我们可以这样做:

#include <iostream>
#include <string>
#include <list>
using namespace std;
int main (void) {
list<string> Milkshakes;
list<string>::iterator MilkshakeIterator;
  Milkshakes.push_back("Chocolate");
  Milkshakes.push_back("Strawberry");
  Milkshakes.push_front("Lime");
  Milkshakes.push_front("Vanilla");
  // print the milkshakes
  Milkshakes.push_front("The Milkshake Menu");
  Milkshakes.push_back("*** Thats the end ***");
  for (MilkshakeIterator=Milkshakes.begin(); 
         MilkshakeIterator!=Milkshakes.end(); 
          ++MilkshakeIterator) {
    // dereference the iterator to get the element
    cout << *MilkshakeIterator << endl;
  }     
}

【注意】在写上面这个小程序时我开始没有把iostream包括进来,以致编译时cout出错,后来加入了#include <iostream.h>竟然说找不到iostream.h,我晕!后来一查才知道,要用#include <iostream>。NET中要使用C++的输入输出流(即cin与cout) ,可以用以下两个方法:

方法一:

System::Console::Writeline();

System::Console::Write();


方法二:就是#include <iostream>语句,然后就可以在程序中直接cout和cin了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值