std::experimental::ranges:: copy, std::experimental::ranges:: copy_if
|
헤더에 정의됨
<experimental/ranges/algorithm>
|
||
|
template
<
InputIterator I, Sentinel
<
I
>
S, WeaklyIncrementable O
>
requires IndirectlyCopyable
<
I, O
>
|
(1) | (ranges TS) |
|
template
<
InputRange R, WeaklyIncrementable O
>
requires IndirectlyCopyable
<
ranges::
iterator_t
<
R
>
, O
>
|
(2) | (ranges TS) |
|
template
<
InputIterator I, Sentinel
<
I
>
S, WeaklyIncrementable O,
class
Proj
=
ranges::
identity
,
|
(3) | (ranges TS) |
|
template
<
InputRange R, WeaklyIncrementable O,
class
Proj
=
ranges::
identity
,
|
(4) | (ranges TS) |
소스 범위(
[
first
,
last
)
또는
r
)의 요소들을 대상 범위의
result
에서 시작하는 위치로 복사하며, 소스 범위의 첫 번째 요소부터 마지막 요소까지 순차적으로 진행합니다.
[
first
,
last
)
내의 모든 요소를 복사합니다. 각 음수가 아닌 정수
n < (last - first)
에 대해
*
(
result
+
n
)
=
*
(
first
+
n
)
를 수행합니다.
result
가 범위
[
first
,
last
)
내에 있을 경우 동작은 정의되지 않습니다. 이 경우
ranges::copy_backward
를 대신 사용할 수 있습니다.
위에 기술된 선언들과는 별개로, 알고리즘 선언에 대한 실제 템플릿 매개변수의 개수와 순서는 명시되지 않습니다. 따라서 알고리즘을 호출할 때 명시적 템플릿 인수를 사용하는 경우, 해당 프로그램은 이식성이 없을 가능성이 높습니다.
목차매개변수
반환값
다음 두 멤버를 포함하는
복잡도
1)
정확히
ranges::
distance
(
first, last
)
번의 할당이 수행됩니다.
2)
정확히
ranges::
distance
(
r
)
번의 할당이 수행됩니다.
3)
정확히
ranges::
distance
(
first, last
)
번의 해당 프로젝션과 조건자의 적용.
4)
정확히
ranges::
distance
(
r
)
번의 해당 프로젝션과 조건자의 적용.
가능한 구현
예제다음 코드는 copy를 사용하여 한 벡터의 내용을 다른 벡터로 복사하고 결과 벡터를 출력합니다:
이 코드 실행
#include <experimental/ranges/algorithm> #include <experimental/ranges/iterator> #include <iostream> #include <numeric> #include <vector> int main() { // see https://ko.cppreference.net/w/cpp/language/namespace_alias namespace ranges = std::experimental::ranges; std::vector<int> from_vector(10); std::iota(from_vector.begin(), from_vector.end(), 0); std::vector<int> to_vector; ranges::copy_if(from_vector.begin(), from_vector.end(), ranges::back_inserter(to_vector), [](const auto i) { return i % 3; }); // or, alternatively, // std::vector<int> to_vector(from_vector.size()); // std::copy(from_vector, to_vector.begin()); std::cout << "to_vector contains: "; ranges::copy(to_vector, ranges::ostream_iterator<int>(std::cout, " ")); std::cout << '\n'; } 출력: to_vector contains: 1 2 4 5 7 8 같이 보기
|