gpt4 book ai didi

c++ - 接受两个迭代器的模板

转载 作者:行者123 更新时间:2023-11-28 08:19:02 25 4
gpt4 key购买 nike

为什么普通算法模板被设计成接受两个迭代器而不是一对这些迭代器?考虑这个例子:

#include <iostream>
#include <iterator>
#include <vector>

using namespace std;

template <typename Range, typename OutputIterator>
void copy2 (Range r, OutputIterator o) {
copy (r.first, r.second, o);
}

template <typename iter1, typename iter2>
pair<typename iter1, typename iter2> Range(iter1 start, iter2 end) {
return make_pair(start, end);
}

int main()
{
vector<int> myvector;
myvector.push_back(3);
myvector.push_back(2);
myvector.push_back(1);

// ordinary algorithm template accepts two iterators
copy(myvector.begin(),
myvector.end(),
ostream_iterator<int> (cout,"\n") );

// this template accepts iterator Range
copy2(Range(myvector.begin(),myvector.end()),
ostream_iterator<int> (cout,"\n"));
}

copy() 比 copy2() 更好的原因是什么 [除了 copy2() 调用冗长之外]

编辑:我按照 DeadMG 的建议减少了 copy2() 的冗长程度。

最佳答案

真的吗?没有一个。标准库只有迭代器的概念,因为据我所知,在标准化之前没有人提出范围。许多人认为使用范围可以大大改善它。其次,您可以通过一些额外的预写锅炉轻松改善 #2 的冗长。

template<typename T> std::pair<typename T::const_iterator, typename T::const_iterator> all(const T& t) {
return std::make_pair(t.begin(), t.end());
}
template<typename T> std::pair<typename T::iterator, typename T::iterator> all( T& t) {
return std::make_pair(t.begin(), t.end());
}

copy2(all(myvector), ostream_iterator<int>(cout, "\n"));

关于c++ - 接受两个迭代器的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6625844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com