【发布时间】:2014-02-26 23:28:24
【问题描述】:
伙计们,我正在使用标准模板语言,几个月前我开始阅读有关它的更多信息,并实施了一些练习。我这里有这段代码:
class Student {
// many attributes and methods here plus:
char* name; // Student name
char* courseName; // Student course name
std::string toString() { return std::string(name); }
}
std::string FindCourseName ( std::list< Student > stu, string name )
{
for ( std::list< Student >::iterator it = stu.begin();
it != stu.end();
it++ )
{
if ( (*it).toString() == name )
{
return it->courseName;
}
}
return "";
}
练习要求:
a) 在 FindCourseName 方法中完成了多少不必要的对象创建/复制? b) 您将如何减少此份数? c) 你会如何优化上面的代码?
这段代码我看了很多遍,看不到任何不必要的对象副本,你们能给我点灯吗?哈哈哈非常感谢!
【问题讨论】:
-
一目了然,我看到至少有 4 个(将列表算作一个。)
-
嗯,我只看到了 3 个。我还看到了一些严格不需要的副本,但我不会删除它们。
-
@MooingDuck 其实我同意。 3 个绝对可以避免的。
-
几个,但函数参数类型是唯一值得担心的变化。 (一个小技巧:在表达式
it++中有两个轻量级对象的副本。) -
@aschepler:我当然希望没有人会数那个,这太微不足道了,我怀疑有人会数它。不过家庭作业......也许教授可能会。