头文件algorithm
template
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);
复制元素范围
将[first,last]范围内的元素复制到从result开始的范围内。
该函数将迭代器返回到目标范围的末尾(指向复制的最后一个元素后面的元素)。
范围不应以结果指向[first,last]范围内的元素的方式重叠。 对于此类情况,请参阅copy_backward。
此函数模板的行为等效于:
template
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result)
{
while (first!=last) {
*result = *first;
++result; ++first;
}
return result;
}
到目标范围末尾的迭代器,其中元素已被复制。
// copy algorithm example
#include // std::cout
#include // std::copy
#include // std::vector
int main () {
int myints[]={10,20,30,40,50,60,70};
std::vector myvector (7);
std::copy ( myints, myints+7, myvector.begin() );
std::cout << "myvector contains:";
for (std::vector::iterator it = myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
如果元素赋值或迭代器上的操作抛出,则抛出。请注意,无效参数会导致未定义的行为。
头文件algorithm
template
OutputIterator copy_n (InputIterator first, Size n, OutputIterator result);
复制元素
将从第一个开始的范围中的前n个元素复制到从结果开始的范围。
该函数将迭代器返回到目标范围的末尾(指向复制的最后一个元素之后的一个)。
如果n为负数,则该函数不执行任何操作。
如果范围重叠,则结果指向的范围中的某些元素可能具有未定义但有效的值。
此函数模板的行为等效于:
template
OutputIterator copy_n (InputIterator first, Size n, OutputIterator result)
{
while (n>0) {
*result = *first;
++result; ++first;
--n;
}
return result;
}
到目标范围末尾的迭代器,其中元素已被复制。
// copy_n algorithm example
#include // std::cout
#include // std::copy
#include // std::vector
int main () {
int myints[]={10,20,30,40,50,60,70};
std::vector myvector;
myvector.resize(7); // allocate space for 7 elements
std::copy_n ( myints, 7, myvector.begin() );
std::cout << "myvector contains:";
for (std::vector::iterator it = myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
如果元素赋值或迭代器上的操作抛出,则抛出。请注意,无效参数会导致未定义的行为。
头文件algorithm
template
OutputIterator copy_if (InputIterator first, InputIterator last,
OutputIterator result, UnaryPredicate pred);
复制范围的某些元素
将pred返回true的范围[first,last]中的元素复制到以result开头的范围。
此函数模板的行为等效于:
template
OutputIterator copy_if (InputIterator first, InputIterator last,
OutputIterator result, UnaryPredicate pred)
{
while (first!=last) {
if (pred(*first)) {
*result = *first;
++result;
}
++first;
}
return result;
}
该函数不得修改其任何参数。这可以是函数指针或函数对象。
范围不得重叠。
一个迭代器,指向结果序列中写入的最后一个元素后面的元素。
// copy_if example
#include // std::cout
#include // std::copy_if, std::distance
#include // std::vector
int main () {
std::vector foo = {25,15,5,-5,-15};
std::vector bar (foo.size());
// copy only positive numbers:
auto it = std::copy_if (foo.begin(), foo.end(), bar.begin(), [](int i){return !(i<0);} );
bar.resize(std::distance(bar.begin(),it)); // shrink container to new size
std::cout << "bar contains:";
for (int& x: bar) std::cout << ' ' << x;
std::cout << '\n';
return 0;
}
如果任何pred,元素赋值或迭代器上的操作抛出,则抛出。请注意,无效参数会导致未定义的行为。
头文件algorithm
template
BidirectionalIterator2 copy_backward (BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result);
向后复制元素范围
复制从最后开始到结束范围内的[first,last]范围内的元素。
该函数将迭代器返回到目标范围中的第一个元素。
结果范围的元素与[first,last]的顺序完全相同。 要撤消其顺序,请参阅reverse_copy。
该函数首先将*(last-1)复制到*(result-1)中,然后通过前面的元素向后移动,直到第一次到达(并包括它)。
范围不应以这样的方式重叠:结果(目标范围中的过去元素)指向范围内的元素(first,last)。对于这种情况,请参见copy。
此函数模板的行为等效于:
template
BidirectionalIterator2 copy_backward ( BidirectionalIterator1 first,
BidirectionalIterator1 last,
BidirectionalIterator2 result )
{
while (last!=first) *(--result) = *(--last);
return result;
}
到目标序列的第一个元素的迭代器,其中元素已被复制。
// copy_backward example
#include // std::cout
#include // std::copy_backward
#include // std::vector
int main () {
std::vector myvector;
// set some values:
for (int i=1; i<=5; i++)
myvector.push_back(i*10); // myvector: 10 20 30 40 50
myvector.resize(myvector.size()+3); // allocate space for 3 more elements
std::copy_backward ( myvector.begin(), myvector.begin()+5, myvector.end() );
std::cout << "myvector contains:";
for (std::vector::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
如果元素赋值或迭代器上的操作抛出,则抛出。请注意,无效参数会导致未定义的行为。