您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > VC.net > 正文
体验Visual C++.NET 2005中的STL
[文章信息]
作者:LITHR
时间:2005-01-25
出处:天极BLOG
责任编辑:方舟
[文章导读]
为了更好的使STL适合.NET开发,Visual C++产品组,在2005版的Visual C++中重新设计了STL,并命名为STL.NET
advertisement
热点推荐
· 1月25日软件精选 ZoneNet时钟应用技巧
· 用EasyBoot轻松做启动光盘
· QQ新尾巴病毒手动清除记
· 防止Visual C++应用程序缓冲区溢出
· 经典黑客远程网络攻击过程概要
[正文]

1 2 3 4  下一页

  为了更好的使STL适合.NET开发,Visual C++产品组,在2005版的Visual C++中重新设计了STL,并命名为STL.NET,从Beta1版本的产品中开始提供。

  在STL.NET的设计中,STL的实现使用了CLI泛型和C++模版机制。2005版本的C++将加入C++/CLI动态编程的支持,应当会成为最能够满足程序员设计的语言。

  给予程序员丰富的选择

  总共有三个容器库可供程序员用于操作CLI类型,这三个容器库建于三种类型参数化模型之上。

  原先元素类型存储的Systems::Collection 库是基于CLI类型中的对象基类来实现的。如下的 ArrayList实现了IList接口。它代表类型对象的数组,在本例中用于控制String类型的元素。(这里采用版本2的语法来实现)

void objectCollection()
{
 using namespace System::Collections;
 ArrayList ^as = gcnew ArrayList;
 as->Add( "Pooh" ); as->Add( "Piglet" );
 as->Add( "Eeyore" ); as->Add( "Rabbit" );
 as->Sort();
 Console::WriteLine( "ArrayList holds {0} elements: ",as->Count );
 for ( int i = 0; i < as->Count; i++ )
  Console::WriteLine( as[ i ] );
  int index = as->IndexOf( "Pooh" );
  if ( index != -1 )
  {
   //需要一个清晰地downcast
   String^ item = safe_cast( as[ index ]);
   as->RemoveAt( index );
  }
  as->Remove( "Rabbit" );
  Console::WriteLine( "\nArrayList holds {0} elements: ",as->Count );
  IEnumerator^ is = as->GetEnumerator();
  while ( is->MoveNext() )
   Console::WriteLine( is->Current );
}

  现在我们引入了一个基于CLI泛型机制的新的容器库。可以在System::Collections::Generic 命名空间中找到。这是在Visual Studio 2005 Beta1中的实现,在最终的发布版当中可能会有所改变。Collection 是一个具体的泛型基类,用户们可以从其中派生自己特化的容器类。下面的样例与上面的例子作用相同,只是使用了新的容器库,



  STL.NET提供了一个与以往设计风格迥异的类型参数化模型,我们将在下个话题中谈到 。下面是String容器的实现。

#include
#include

void stlCollection()
{
 vector ^svec = gcnew vector;
 svec->push_back("Pooh"); svec->push_back("Piglet");
 svec->push_back("Eeyore"); svec->push_back("Rabbit");
 //泛型算法:sort
 sort( svec->begin(), svec->end() );
 Console::WriteLine( "Collection holds {0} elements: ",svec->size() );
 for ( int i = 0; i < svec->size(); i++ )
  Console::WriteLine( svec[ i ] );
  //泛型算法:find
  vector::iterator iter = find( svec->begin(), svec->end(), "Pooh" );
  if ( iter != svec->end() )
  {
   //不需要downcast……
   String ^item = *iter;
   svec->erase( iter );
  }
  //泛型算法: remove……
  remove( svec->begin(), svec->end(), "Rabbit" );
  Console::WriteLine( "\nCollection holds {0} elements:",svec->size() );
  IEnumerator ^is = svec->GetEnumerator();
  while ( is->MoveNext() )
  Console::WriteLine( is->Current );
 }


1 2 3 4  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 托管C++应用程序开发之概述
  • 用VC.NET制作启动屏幕的新方法
  • VC++.NET中定义和使用MFC DLL
  • VC++.NET开发环境整合技巧
  • 美公司起诉戴尔明基等24厂商侵犯LCD屏专利
  • 收购IBM交易或受阻 联想反逆市大涨7.4%
  • 新迅驰上市笔记本电脑狂降价 最高达4000元
  • 英特尔选错迅驰2代生日 厂商采取观望态度
  • 与IBM交易遭美政府调查 联想称将全力配合
  • 铁通今年资金需求140亿 发展方向仍扑朔迷离
  • 三星中国闪电换帅 在中国策略可能大调整
  • 纽曼mp3功能名不符实 厂家称“以实物为准”
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    温馨祝福|极品爆笑|生肖属相|StarQ|体育竞技|美好风光|每逢佳节
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 冲动的惩罚
    最熟悉的陌生人 绿光
    可爱女人 盛夏的果实
    当你孤单你会想起谁 孤单北半球
    2002年的第一场雪 眉飞色舞
    有多少爱可以重来 挪威的森林
    最浪漫的事 老板电话

    CSEEK搜索