对于数组,除了迭代方法(即运行一个循环以在各自的索引处复制每个元素)之外,没有太多选择来将一个数组复制到另一个数组。但是向量类有不止一种方法可以更容易地将整个向量复制到另一个。复制基本上有两种类型:-
null
方法1:迭代法。 这种方法是一种通用的复制方法,在这种方法中,循环用于将旧的向量元素推回到新的向量中。它们被大量复制
// C++ code to demonstrate copy of vector // by iterative method. #include<iostream> #include<vector> using namespace std; int main() { // Initializing vector with values vector< int > vect1{1, 2, 3, 4}; // Declaring new vector vector< int > vect2; // A loop to copy elements of // old vector into new vector // by Iterative method for ( int i=0; i<vect1.size(); i++) vect2.push_back(vect1[i]); cout << "Old vector elements are : " ; for ( int i=0; i<vect1.size(); i++) cout << vect1[i] << " " ; cout << endl; cout << "New vector elements are : " ; for ( int i=0; i<vect2.size(); i++) cout << vect2[i] << " " ; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :" ; cout << vect1[0] << endl; cout << "The first element of new vector is :" ; cout << vect2[0] <<endl; return 0; } |
输出:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is : 2 The first element of new vector is : 1
在上面的代码中,改变一个向量的值不会改变另一个向量的值,因此它们不会被分配到同一个地址,因此是深度复制。 方法2:通过 赋值“=”运算符 . 只需将新向量指定给旧向量,即可复制向量。对于数组,这种赋值方式是不可能的。
// C++ code to demonstrate copy of vector // by iterative method. #include<iostream> #include<vector> using namespace std; int main() { // Initializing vector with values vector< int > vect1{1, 2, 3, 4}; // Declaring new vector vector< int > vect2; // Using assignment operator to copy one // vector to other vect2 = vect1; cout << "Old vector elements are : " ; for ( int i=0; i<vect1.size(); i++) cout << vect1[i] << " " ; cout << endl; cout << "New vector elements are : " ; for ( int i=0; i<vect2.size(); i++) cout << vect2[i] << " " ; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :" ; cout << vect1[0] << endl; cout << "The first element of new vector is :" ; cout << vect2[0] <<endl; return 0; } |
输出:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is : 2 The first element of new vector is : 1
方法3:将向量作为构造函数传递。 在声明向量时,传递一个旧的初始化向量,将传递向量的元素复制到新声明的向量中。它们被大量复制。
// C++ code to demonstrate copy of vector // by constructor method. #include<bits/stdc++.h> using namespace std; int main() { // Initializing vector with values vector< int > vect1{1, 2, 3, 4}; // Declaring new vector and copying // element of old vector // constructor method, Deep copy vector< int > vect2(vect1); cout << "Old vector elements are : " ; for ( int i=0; i<vect1.size(); i++) cout << vect1[i] << " " ; cout << endl; cout << "New vector elements are : " ; for ( int i=0; i<vect2.size(); i++) cout << vect2[i] << " " ; cout<< endl; // Changing value of vector to show that a new // copy is created. vect1[0] = 2; cout << "The first element of old vector is :" ; cout << vect1[0] << endl; cout << "The first element of new vector is :" ; cout << vect2[0] <<endl; return 0; } |
输出:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2 The first element of new vector is :1
方法4:使用内置函数
- 复制(第一个迭代器、最后一个迭代器、后一个插入器()) :-这是将旧向量复制到新向量的另一种方法。这个函数有3个参数,第一个是old vector的第一个迭代器,第二个是old vector的最后一个迭代器,第三个是back_inserter函数,用于从后面插入值。这也 生成了一个深度副本。
// C++ code to demonstrate copy of vector
// by assign() and copy().
#include<iostream>
#include<vector> // for vector
#include<algorithm> // for copy() and assign()
#include<iterator> // for back_inserter
using
namespace
std;
int
main()
{
// Initializing vector with values
vector<
int
> vect1{1, 2, 3, 4};
// Declaring new vector
vector<
int
> vect2;
// Copying vector by copy function
copy(vect1.begin(), vect1.end(), back_inserter(vect2));
cout <<
"Old vector elements are : "
;
for
(
int
i=0; i<vect1.size(); i++)
cout << vect1[i] <<
" "
;
cout << endl;
cout <<
"New vector elements are : "
;
for
(
int
i=0; i<vect2.size(); i++)
cout << vect2[i] <<
" "
;
cout<< endl;
// Changing value of vector to show that a new
// copy is created.
vect1[0] = 2;
cout <<
"The first element of old vector is :"
;
cout << vect1[0] << endl;
cout <<
"The first element of new vector is :"
;
cout << vect2[0] <<endl;
return
0;
}
输出:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2 The first element of new vector is :1
- 赋值(第一个迭代器,最后一个迭代器) :-此方法为新向量指定与旧向量相同的值。这需要两个参数,第一个迭代器到旧向量,最后一个迭代器到旧向量。这将生成一个深度副本。
// C++ code to demonstrate copy of vector
// by assign()
#include<iostream>
#include<vector> // for vector
#include<algorithm> // for copy() and assign()
#include<iterator> // for back_inserter
using
namespace
std;
int
main()
{
// Initializing vector with values
vector<
int
> vect1{1, 2, 3, 4};
// Declaring another vector
vector<
int
> vect2;
// Copying vector by assign function
vect2.assign(vect1.begin(), vect1.end());
cout <<
"Old vector elements are : "
;
for
(
int
i=0; i<vect1.size(); i++)
cout << vect1[i] <<
" "
;
cout << endl;
cout <<
"New vector elements are : "
;
for
(
int
i=0; i<vect2.size(); i++)
cout << vect2[i] <<
" "
;
cout<< endl;
// Changing value of vector to show that a new
// copy is created.
vect1[0] = 2;
cout <<
"The first element of old vector is :"
;
cout << vect1[0] << endl;
cout <<
"The first element of new vector is :"
;
cout << vect2[0] <<endl;
return
0;
}
输出:
Old vector elements are : 1 2 3 4 New vector elements are : 1 2 3 4 The first element of old vector is :2 The first element of new vector is :1
本文由 曼吉星 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END