C++中复制向量的方法

对于数组,除了迭代方法(即运行一个循环以在各自的索引处复制每个元素)之外,没有太多选择来将一个数组复制到另一个数组。但是向量类有不止一种方法可以更容易地将整个向量复制到另一个。复制基本上有两种类型:-

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
喜欢就支持一下吧
点赞7 分享