以下是一些来自一个伟大网站的代码,它可以完成我想要的功能(通过寻址类对象来搜索类对象的向量)。
#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”&gt; 3崩溃时,因为对象只有3的大小。我得到了这个,但有可能在发生这种情况时得到警告,这样就不会崩溃但是我能用警告消息在代码中以某种方式纠正它吗?
答案 0 :(得分:1)
如果它无效,你应该检查返回的迭代器是否有效,抛出和异常(或以任何其他方式报告错误):
if (itElem == objects.end())
throw MyVeryCoolException("Woops wrong id");
别忘了设置一个全局异常处理程序(toplevel catch),否则如果异常未被捕获,你的应用程序仍会崩溃。