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

Man*_*mar 6 c++ stl interface c++11

在阅读Alexander Stepanov 的书(笔记编程)和正在进行的视频讲座时,我学到了一些关于良好界面对程序影响的惊人事实.

他解释了界面设计是非常重要的部分,它对程序有重大影响.在使用以下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;
}
Run Code Online (Sandbox Code Playgroud)

在上面,他解释说

  1. 不要返回"pred",因为它是由此方法的调用者传递的.
  2. 不要返回"last", 因为它已知并由此方法的调用者传递.永远不要返回已知并由调用者传递给此函数的内容.
  3. "first"应该是在方法执行期间从此方法返回的,这可能已经改变,因此这是调用者的新/更新因此应该被传递.

所以我在分析C++ STL接口后学到的主要思想是:

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

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

template< class InputIt, class Size, class OutputIt >
OutputIt copy_n( InputIt first, Size count, OutputIt result );
Run Code Online (Sandbox Code Playgroud)

template< class InputIt, class Size, class OutputIt >
pair<InputIt, OutputIt> copy_n( InputIt first, Size count, OutputIt result );
Run Code Online (Sandbox Code Playgroud)

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