STL中的迭代器是一种智能指针对象,用来实现对容器内元素的访问,每种容器都需要实现自己的迭代器;迭代器也是STL中通用算法和容器之间的粘合剂。

这段代码是vector的迭代器使用示例:

#include
<vector>
using namespace std;
 
vector<char*> v;
try
{
    v.push_back("the 1st string");
    v.push_back("the 2nd string");
    v.push_back("the 3rd string");
 
    //定义迭代器,用于遍历vector
    //begin()方法返回一个迭代器
    vector<char*>::iterator i=v.begin();
 
    //迭代器一般使用!=iterator.end()来做结束条件判断
    for (;i!=v.end();++i)
    {
        //迭代器支持"*"解引用
        cout<<*i<<endl;
    }
}
catch(...)
{
    cout<<"error"<<endl;
}


 


本文链接地址: STL中的迭代器使用
http://qingfengju.com/index.asp?id=95

分类:Win32/C++ 查看次数:6821 发布时间:2009/6/27 10:51:51

在C++中,可以使用C++的标准异常处理:

int *p=NULL;
try
{
    *p=100;
}
catch(...)
{
    printf("an error has been occured.\n");
}

但是这样的try..catch结构只有在Debug模式下有效,Release模式下无法捕获,Google后发现是因为VC++编译器的优化功能造成的,编译时加入/EHa 选项(异常处理模型)即可正常使用。
参见:
http://www.doyj.com/2006/09/11/try-catch/
http://members.cox.net/doug_web/eh.htm
http://msdn.microsoft.com/zh-cn/express/1deeycx5.aspx 权威。

选项的格式:/EH{s|a}[c][-]
a: 捕获异步(结构化)异常和同步 (C++) 异常的异常处理模型。
s: 仅捕获 C++ 异常并通知编译器假定 extern C 函数确实引发了异常的异常处理模型。
c: 如果与 s (/EHsc) 一起使用,则仅捕获 C++ 异常并通知编译器假定 extern C 函数从未引发 C++ 异常。/EHca 等效于 /EHa。
可以使用符号 "-" 清除选项。例如,/EHsc- 解释为 /EHs /EHc- 并且等价于 /EHs。
 
当然,还可以使用WindowsSEH异常处理结构(不需要/EHa 选项):

int *p=NULL;
__try
{
    *p=100;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
    printf("an error has been occured.\n");
}
 
注意:在使用具有析构函数的对象的函数中,不应使用结构化异常处理。如果出现异常,则无法调用析构函数。

 


本文链接地址: 在C++中捕获未曾意料的异常
http://qingfengju.com/index.asp?id=94

分类:Win32/C++ 查看次数:7556 发布时间:2009/6/26 17:31:08