为什么c ++中std :: copy_n的接口不正确?

时间:2014-04-17 19:40:29

标签: c++ c++11 interface stl

在阅读亚历山大·斯捷潘诺夫的书(Notes On Programming)和正在进行的video-lecture时,我学到了一些关于良好界面对计划影响的惊人事实。

他解释了界面设计是非常重要的部分,它对程序有重大影响。在使用以下STL算法/函数" std :: find_if"设计接口时,他提到了以下几点。

template<class I, class P>
I  find_if (I first, I last, P pred) {
  while (first!=last) {
    if (pred(*first)) return first;
    ++first;
  } 
  return last;
}

在上文中,他解释说

  1. 不要返回&#34; pred&#34; ,因为此方法的调用方传递了它。
  2. 不要返回&#34; last&#34; ,因为它已知并由此来电者传递 方法。永远不要返回已知并由来电者传递的内容 这个功能。
  3. &#34;首先&#34; 应该是这个方法的回报 执行该方法,这可能已经改变,所以这是 因此应该传递一些新的/更新的呼叫者。
  4. 因此,在分析C ++ STL接口后我学到的主要思想是:

    • 传递尽可能多的信息,为呼叫者提供有关该特定功能所做工作的信息。
    • 在执行功能期间,不要返回已知且未更改的信息。

    基于以上观点,他提到 std :: copy_n 界面不正确,应该在不久的将来修复

    template< class InputIt, class Size, class OutputIt >
    OutputIt copy_n( InputIt first, Size count, OutputIt result );
    

    template< class InputIt, class Size, class OutputIt >
    pair<InputIt, OutputIt> copy_n( InputIt first, Size count, OutputIt result );
    

    有人可以解释一下为什么这对于此函数的调用者来说是非常有用的,以获取有关第一个结果的信息吗?

0 个答案:

没有答案