一、函數介紹
template OutputIterator vectorcopy(InputIterator first, InputIterator last, OutputIterator result);
vectorcopy函數用於將[first, last)範圍內的元素複製到[result, result + (last – first))範圍內。該函數是一個通用算法,其能夠處理所有能夠用迭代器訪問的容器,包括數組。
二、使用方法
以下是一個使用vectorcopy函數將一個vector複製到另一個vector的基本示例:
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> from = {1, 2, 3, 4, 5}; std::vector<int> to(from.size()); std::vector<int> result = std::vectorcopy(from.begin(), from.end(), to.begin()); std::cout << "to vector contains:"; for(auto const &x : to) std::cout << ' ' << x; std::cout << '\n'; return 0; }
輸出結果:
to vector contains: 1 2 3 4 5
三、參數解釋
1. InputIterator first 和 InputIterator last
這兩個參數表示複製元素的起始位置和結束位置,具體指定了一個範圍[left, right),left代表複製元素的起始位置,right代表複製元素的結束位置。
2. OutputIterator result
result參數指定了複製操作的目標地址,即待複製到的位置。
3. 返回值
vectorcopy函數返回指向複製後的結果範圍中最後一個元素的後繼的OutputIterator類型的迭代器。這意味着,返回值指向輸入迭代器最後一個被複制的元素之後的位置(如果有的話)。
四、經典用例
1. 複製數組
vectorcopy可以用來複制數組,只要將指針轉化為迭代器就行了:
#include <iostream> #include <algorithm> int main() { int from[] = {1, 2, 3, 4, 5}; int to[sizeof(from)/sizeof(int)]; std::vectorcopy(std::begin(from), std::end(from), std::begin(to)); for (auto i : to) { std::cout << i << " "; } std::cout << '\n'; return 0; }
輸出結果:
1 2 3 4 5
2. 複製部分vector容器
以下代碼演示了如何使用vectorcopy函數將vector容器的部分元素複製到另一個vector容器中。
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v1{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; std::vector<int> v2(v1.size() / 2); std::vectorcopy(v1.begin() + v1.size() / 2, v1.end(), v2.begin()); std::cout << "v2 contains: "; for (auto i : v2) { std::cout << i << " "; } std::cout << '\n'; return 0; }
輸出結果:
v2 contains: 6 7 8 9 10
3. 自定義數據類型複製
可以使用vectorcopy複製自定義的數據類型。
#include <iostream> #include <vector> #include <algorithm> struct Person { std::string name; int age; }; int main() { std::vector<Person> persons1{{"Tom", 20}, {"Jerry", 30}, {"Jim", 40}}; std::vector<Person> persons2(persons1.size()); std::vectorcopy(persons1.begin(), persons1.end(), persons2.begin()); std::cout << "persons2 contains:\n"; for (auto p : persons2) { std::cout << p.name << " " << p.age << "\n"; } return 0; }
輸出結果:
persons2 contains: Tom 20 Jerry 30 Jim 40
原創文章,作者:GCOF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/134973.html