这是一些代码,来自一个伟大的网站,它做什么我想要的相当好(在类对象的一个向量搜索寻址类对象)。
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespacestd;
class class1
{
private:
int id;
double value;
public:
class1(int i, double v) :id(i), value(v){ }
int getId()const { return id; }
double getValue() const { return value; }
};
class HasIdentifier :public unary_function<class1, bool>
{
public:
HasIdentifier(int id) : m_id(id) { }
bool operator()(const class1& c)const
{
return (c.getId() == m_id);
}
private:
int m_id;
};
class class2
{
private:
vector <class1> objects;
public:
class2()
{
objects.push_back(class1(1, 100.0));
objects.push_back(class1(2, 100.0));
objects.push_back(class1(3, 100.0));
}
double GetValueOfId(int id)
{
vector<class1>::iterator itElem = find_if(objects.begin(), objects.end(), HasIdentifier(id));
return itElem->getValue();
}
};
int main() {
class2 c;
int id = 4;
cout << id << " " << c.GetValueOfId(id);
cin.get();
return 0;
}
它工作得很好,但每当我输入"int id ">3时,它就崩溃了,因为对象的大小只有3。我得到了这个,但是是否有可能得到警告,当这种情况发生时,它不会崩溃,但我能够在代码中以某种方式纠正它与警告消息?
您应该检查返回的迭代器是否有效,如果无效则抛出异常(或以任何其他方式报告错误):
if (itElem == objects.end())
throw MyVeryCoolException("Woops wrong id");
不要忘记设置一个全局异常处理程序(顶层捕获),否则如果异常未被捕获,应用程序仍然会崩溃。