设为首页 加入收藏

TOP

Visual C++.NET 2005中的STL简介(1)
2013-10-06 23:45:42 来源: 作者: 【 】 浏览:55
Tags:Visual .NET 2005 STL 简介

在STL.NET的设计中,STL的实现使用了CLI泛型和C++(www.cppentry.com)模版机制。2005版本的C++(www.cppentry.com)将加入C++(www.cppentry.com)/CLI动态编程(www.cppentry.com)的支持,应当会成为最能够满足程序员设计的语言。
给予程序员丰富的选择
总共有三个容器库可供程序员用于操作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 );
 }

内容导航

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL for Linux (x86,libc6,Inte.. 下一篇C++中的虚函数(virtual function)..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: