Different methods to copy in C++ STL | std::copy(), copy_n(), copy_if(), copy_backward() Last Updated : 15 Sep, 2023 Comments Improve Suggest changes Like Article Like Report Various varieties of copy() exist in C++ STL that allows to perform the copy operations in different manners, all of them having their own use. These all are defined in header <algorithm>. This article introduces everyone to these functions for usage in day-to-day programming. 1. copy(strt_iter1, end_iter1, strt_iter2) : The generic copy function used to copy a range of elements from one container to another. It takes 3 arguments: strt_iter1 : The pointer to the beginning of the source container, from where elements have to be started copying.end_iter1 : The pointer to the end of source container, till where elements have to be copied.strt_iter2 : The pointer to the beginning of destination container, to where elements have to be started copying. 2. copy_n(strt_iter1, num, strt_iter2) : This version of copy gives the freedom to choose how many elements have to be copied in the destination container. IT also takes 3 arguments: strt_iter1 : The pointer to the beginning of the source container, from where elements have to be started copying.num : Integer specifying how many numbers would be copied to destination container starting from strt_iter1. If a negative number is entered, no operation is performed.strt_iter2 : The pointer to the beginning of destination container, to where elements have to be started copying. CPP // C++ code to demonstrate the working of copy() // and copy_n() #include<iostream> #include<algorithm> // for copy() and copy_n() #include<vector> using namespace std; int main() { // initializing source vector vector<int> v1 = { 1, 5, 7, 3, 8, 3 }; // declaring destination vectors vector<int> v2(6); vector<int> v3(6); // using copy() to copy 1st 3 elements copy(v1.begin(), v1.begin()+3, v2.begin()); // printing new vector cout << "The new vector elements entered using copy() : "; for(int i=0; i<v2.size(); i++) cout << v2[i] << " "; cout << endl; // using copy_n() to copy 1st 4 elements copy_n(v1.begin(), 4, v3.begin()); // printing new vector cout << "The new vector elements entered using copy_n() : "; for(int i=0; i<v3.size(); i++) cout << v3[i] << " "; } Output: The new vector elements entered using copy() : 1 5 7 0 0 0 The new vector elements entered using copy_n() : 1 5 7 3 0 0 3. copy_if(): As the name suggests, this function copies according to the result of a "condition".This is provided with the help of a 4th argument, a function returning a boolean value. This function takes 4 arguments, 3 of them similar to copy() and an additional function, which when returns true, a number is copied, else number is not copied.4. copy_backward(): This function starts copying elements into the destination container from backward and keeps on copying till all numbers are not copied. The copying starts from the "strt_iter2" but in the backward direction. It also takes similar arguments as copy(). CPP // C++ code to demonstrate the working of copy_if() // and copy_backward() #include<iostream> #include<algorithm> // for copy_if() and copy_backward() #include<vector> using namespace std; int main() { // initializing source vector vector<int> v1 = { 1, 5, 6, 3, 8, 3 }; // declaring destination vectors vector<int> v2(6); vector<int> v3(6); // using copy_if() to copy odd elements copy_if(v1.begin(), v1.end(), v2.begin(), [](int i){return i%2!=0;}); // printing new vector cout << "The new vector elements entered using copy_if() : "; for(int i=0; i<v2.size(); i++) cout << v2[i] << " "; cout << endl; // using copy_backward() to copy 1st 4 elements // ending at second last position copy_backward(v1.begin(), v1.begin() + 4, v3.begin()+ 5); // printing new vector cout << "The new vector elements entered using copy_backward() : "; for(int i=0; i<v3.size(); i++) cout << v3[i] << " "; } Output: The new vector elements entered using copy_if() : 1 5 3 3 0 0 The new vector elements entered using copy_backward() : 0 1 5 6 3 0 5. Copy using inserter(): Before copy() operation let us understand the syntax of inserter(). inserter() is used as a destination that where we want to copy the elements of the container. inserter() takes two parameters. The first is a container of arbitrary type and the second is an iterator into the container. It returns an instance of insert_iterator working on a container of arbitrary type. This wrapper function helps in creating insert_iterator instances. Typing the name of the %iterator requires knowing the precise full type of the container, which can be tedious and impedes generic programming. Using this function lets you take advantage of automatic template parameter deduction, making the compiler match the correct types for you. The syntax for inserter(): std::inserter(Container& x, typename Container::iterator it); x: Destination container where the new elements will be inserted. it: Iterator pointing to the insertion point. Returns: An insert_iterator that inserts elements into x at the position indicated by it. The syntax for copy using inserter(): copy(strt_iter1, end_iter1, inserter(Container& x, typename Container::iterator it)); C++ // C++ code to demonstrate the working of copy() using inserter() #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> v1 = {1, 5, 7, 3, 8, 3}; vector<int>::iterator itr; vector<int> v2; //using inserter() copy(v1.begin(), v1.end(), inserter(v2, itr)); cout << "\nThe new vector elements entered using inserter: "; for (int i = 0; i < v2.size(); i++) cout << v2[i] << " "; } Output: The new vector elements entered using inserter: 1 5 7 3 8 3 Comment More infoAdvertise with us Next Article max_element in C++ STL M Manjeet Singh Improve Article Tags : C++ STL cpp-algorithm-library Practice Tags : CPPSTL Similar Reads C++ Standard Template Library (STL) The C++ Standard Template Library (STL) is a set of template classes and functions that provides the implementation of common data structures and algorithms such as lists, stacks, arrays, sorting, searching, etc. It also provides the iterators and functors which makes it easier to work with algorith 9 min read Containers in C++ STL Standard Template Library (STL) provides the built-in implementation of commonly used data structures known as containers. A container is a holder object that stores a collection of other objects (its elements). They are implemented as class templates, which allows great flexibility in the data type 3 min read STL ContainersSTD::array in C++The array is a collection of homogeneous objects and this array container is defined for constant size arrays or (static size). This container wraps around fixed-size arrays and the information of its size are not lost when declared to a pointer. In order to utilize arrays, we need to include the ar 5 min read Vector in C++ STLC++ vector is a dynamic array that stores collection of elements same type in contiguous memory. It has the ability to resize itself automatically when an element is inserted or deleted.Create a VectorBefore creating a vector, we must know that a vector is defined as the std::vector class template i 7 min read List in C++ STLIn C++, list container implements a doubly linked list in which each element contains the address of next and previous element in the list. It stores data in non-contiguous memory, hence providing fast insertion and deletion once the position of the element is known.Example:C++#include <iostream 7 min read Forward List in C++ STLIn C++, forward_list container provides the implementation of singly linked list data structure. It stores data in non-contiguous memory where each element points to the next element in the sequence. This makes insertion and deletion faster once the position of the element is known.Example:C++#inclu 7 min read Stack in C++ STLIn C++, stack container follows LIFO (Last In First Out) order of insertion and deletion. It means that most recently inserted element is removed first and the first inserted element will be removed last. This is done by inserting and deleting elements at only one end of the stack which is generally 5 min read Queue in C++ STLIn C++, queue container follows the FIFO (First In First Out) order of insertion and deletion. According to it, the elements that are inserted first should be removed first. This is possible by inserting elements at one end (called back) and deleting them from the other end (called front) of the dat 4 min read Deque in C++ STLIn C++, deque container provides fast insertion and deletion at both ends. Stands for Double Ended QUEue, it is a special type of queue where insertion and deletion operations are possible at both the ends in constant time complexity.Example:C++#include <iostream> #include <deque> using 6 min read Set in C++ STLIn C++, sets are associative container which stores unique elements in some sorted order. By default, it is sorted ascending order of the keys, but this can be changed as per requirement. It provides fast insertion, deletion and search operations.Example: C++#include <iostream> #include <se 7 min read Map in C++ STLIn C++, maps are associative containers that store data in the form of key value pairs sorted on the basis of keys. No two mapped values can have the same keys. By default, it stores data in ascending order of the keys, but this can be changes as per requirement.Example:C++#include <bits/stdc++.h 8 min read Multiset in C++ STLIn C++, multiset is an associative container similar to the set, but it can store multiple elements with same value. It is sorted in increasing order by default, but it can be changed to any desired order. It provides fast insertion, deletion and search operations.Example:C++#include <iostream 6 min read Multimap in C++ STLIn C++, multimap is an associative container similar to map, but it can have multiple elements with same keys. It stores all the elements in increasing order based on their keys by default but can be changed if required. It provides fast insertion, deletion and search on this sorted data.Example:CPP 8 min read Unordered Sets in C++ STLIn C++, unordered_set is an unordered associative container that stores unique elements. Unlike set, it stores its elements using hashing. This provides average constant-time O(1) search, insert, and delete operations but the elements are not sorted in any particular order.Example:C++#include <io 6 min read Unordered Map in C++ STLIn C++, unordered_map is an unordered associative container that stores data in the form of unique key-value pairs. But unlike map, unordered map stores its elements using hashing. This provides average constant-time complexity O(1) for search, insert, and delete operations but the elements are not 7 min read Unordered Multiset in C++ STLIn C++, unordered multiset is an unordered associative container that works similarly to an unordered set, but it can store multiple copies of the same value. It provides fast insert, delete and search operations using hashing, but the elements are not in any particular order.Example: C++#include 7 min read Unordered Multimap in C++ STLIn C++, the unordered_multimap is an unordered associative container that stores data in the form of key-value pairs. It is similar to unordered map, but it allows multiple elements with the same key. It provides fast insertion, deletion and search operations in O(1) time by using hashing.Example:C+ 7 min read Introduction to Iterators in C++ An iterator is an object like a pointer that points to an element inside the container. We can use iterators to move through the contents of the container. They can be visualized as something similar to a pointer pointing to some location and we can access the content at that particular location usi 4 min read STL IteratorsForward Iterators in C++After going through the template definition of various STL algorithms like std::search, std::search_n, std::lower_bound, you must have found their template definition consisting of objects of type Forward Iterator. So what are they and why are they used ? Forward iterators are one of the five main t 6 min read Output Iterators in C++After going through the template definition of various STL algorithms like std::copy, std::move, std::transform, you must have found their template definition consisting of objects of type Output Iterator. So what are they and why are they used ?Output iterators are one of the five main types of ite 6 min read Forward Iterators in C++After going through the template definition of various STL algorithms like std::search, std::search_n, std::lower_bound, you must have found their template definition consisting of objects of type Forward Iterator. So what are they and why are they used ? Forward iterators are one of the five main t 6 min read Bidirectional Iterators in C++After going through the template definition of various STL algorithms like std::reverse, std::next_permutation and std::reverse_copy you must have found their template definition consisting of objects of type Bidirectional Iterator. So what are they and why are they used ? Bidirectional iterators ar 7 min read Random Access Iterators in C++After going through the template definition of various STL algorithms like std::nth_element, std::sort, you must have found their template definition consisting of objects of type Random-access Iterator. So what are they and why are they used?Random-access iterators are one of the five main types of 6 min read Iterators in C++ STLAn iterator in C++ is a pointer-like object that points to an element of the STL container. They are generally used to loop through the contents of the STL container in C++. The main advantage of STL iterators is that they make the STL algorithms independent of the type of container used. We can jus 10 min read C++ STL Algorithm Library Standard Template Library (STL) offers a rich collection of algorithms designed to operate on STL containers and beyond. It provides commonly used algorithms such as sorting, searching, copying, etc. These well tested algorithms are optimized for performance and provide a way to write cleaner, faste 3 min read STL Algorithmssort() in C++ STLIn C++, sort() is a built-in function used to sort the given range in desired order. It provides a simple and efficient way to sort the data in C++, but it only works on data structures that provide random access to its elements such as vectors and arrays.Let's take a look at an example:C++#include 4 min read Different methods to copy in C++ STL | std::copy(), copy_n(), copy_if(), copy_backward()Various varieties of copy() exist in C++ STL that allows to perform the copy operations in different manners, all of them having their own use. These all are defined in header <algorithm>. This article introduces everyone to these functions for usage in day-to-day programming. 1. copy(strt_ite 5 min read max_element in C++ STLThe std::max_element() in C++ is an STL algorithm that is used to find the maximum element in the given range. It is defined inside the <algorithm> header file. In this article, we will learn how to find the maximum element in the range using std::max_element() in C++.Example:C++// C++ program 4 min read find() in C++ STLC++ find() is a built-in function used to find the first occurrence of an element in the given range. It works with any container that supports iterators, such as arrays, vectors, lists, and more. In this article, we will learn about find() function in C++.C++#include <bits/stdc++.h> using nam 2 min read for_each loop in C++Apart from the generic looping techniques, such as "for, while and do-while", C++ in its language also allows us to use another functionality which solves the same purpose termed "for-each" loops. This loop accepts a function which executes over each of the container elements. This loop is defined i 5 min read Algorithm Library Functions in C++ STLNon-modifying sequence operations std :: all_of : Test condition on all elements in rangestd :: any_of : Test if any element in range fulfills conditionstd :: none_of : Test if no elements fulfill conditionstd :: for_each : Apply function to rangestd :: find : Find value in rangestd :: find_if : Fin 4 min read Functors in C++ Please note that the title is Functors (Not Functions)!! Consider a function that takes only one argument. However, while calling this function we have a lot more information that we would like to pass to this function, but we cannot as it accepts only one parameter. What can be done? One obvious an 3 min read C++ STL Cheat Sheet The C++ STL Cheat Sheet provides short and concise notes on Standard Template Library (STL) in C++. Designed for programmers that want to quickly go through key STL concepts, the STL cheatsheet covers the concepts such as vectors and other containers, iterators, functors, etc., with their syntax and 15+ min read Top C++ STL Interview Questions and Answers The Standard Template Library (STL) is a set of C++ template classes that are used to implement widely popular algorithms and data structures such as vectors, lists, stacks, and queues. It is part of the C++ Language ISO standard. STL is a popular topic among interviewers, so it is useful for both f 15+ min read Like