c++的vector赋值方法汇总

可用于拼接多个vector
====================合并======================
#include   <iostream>   
#include   <vector>  
using   namespace   std;
void   print(vector<int>&   v,   const   char*   mark)   {   
cout   <<   "------------   "   <<   mark   <<   "   ------------"   <<   endl;  

size_t   len   =   v.size();   
for   (size_t   i   =   0;   i   <   len;   i++)   {   
   cout   <<   v[i]   <<   endl;   
}   
}  
int   main()   
{   
vector<int>   v1;   
vector<int>   v2;  

for   (int   i   =   0;   i   <   5;   i++)   {   
   v1.push_back(i);   
   if   (i   %   2   ==   1)   {   
    v2.push_back(i   *   10);   
   }   
}  
print(v1,   "v1");   
print(v2,   "v2");  

vector<int>   v3;   
v3.insert(v3.end(),   v1.begin(),   v1.end());   
v3.insert(v3.end(),   v2.begin(),   v2.end());   
print(v3,   "v3");   
}   
结果:

------------   v1   ------------
0
1
2
3
4
------------   v2   ------------
10
30
------------   v3   ------------
0
1
2
3
4
10
30
请按任意键继续. . .


=======================赋值==========================
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

template<typename T>
void vecPrint(const vector<T>& vec)
{
cout << "{";
for(typename vector<T>::const_iterator p = vec.begin(); p != vec.end(); p++)
{
   cout << "{" << *p << "}";
}
cout << "}" << endl;
}
int main()
{
vector<string> vec(5);
string foo[] = {"My", "way", "or", "the", "highway"};

vec[0] = "today";
vec[1] = "is";
vec[2] = "a";
vec[3] = "new";
vec[4] = "day";

vector<string> vec2(vec);
vecPrint(vec2);

vec.at(0) = "Tomorrow";

//vec的内容覆盖了vec2的
vec2.assign(vec.begin(), vec.end());//Copy each element over with assign
vecPrint(vec2);

vec2.assign(&foo[0], &foo[5]);//覆盖了vec2
vecPrint(vec2);

vector<string>::iterator p;
p = find(vec.begin(), vec.end(), "new");
vec2.assign(vec.begin(), p);
vecPrint(vec2);

return 0;
}

结果:


{{today}{is}{a}{new}{day}}
{{Tomorrow}{is}{a}{new}{day}}
{{My}{way}{or}{the}{highway}}
{{Tomorrow}{is}{a}}
请按任意键继续. . .

//insert与merge的比较
merge方式要注意三点:
1、vec1,和vec2需要经过排序,merge只能合并排序后的集合,不然会报错。
2、vec3需要指定好大小,不然会报错。
3、merge的时候指定vec3的位置一定要从begin开始,如果指定了end,它会认为没有空间。
vector<string>vec1,vec2,vec3;  
        //... vec1,vec2赋值insert  
        vec3.insert(vec3.end(),vec1.begin(),vec1.end());  
        vec3.insert(vec3.end(),vec2.begin(),vec2.end()); 

vector<string>vec1,vec2,vec3;  
        //... vec1,vec2赋值merge  
        sort(vec1.begin(),vec1.end());  
        sort(vec2.begin(),vec2.end());  
        vec3.resize(vec1.size()+vec2.size());  
        merge(vec1.begin(),vec1.end(),vec2.begin(),vec2.end(),vec3.begin()); 

I.指定大小的初始化赋值

#include <iostream> 
#include <vector> 
using namespace std;
void print(vector<int>::const_iterator beg, vector<int>::const_iterator end)
{
    while(beg != end)
    {
        cout<<*beg++;
        if(beg != end) 
              cout<<" ";
        else cout<<"|";
    }
    cout<<endl;
}

void main()  
{ 
   vector<int>ivec1(10,42); //内置方法,初始化的内容为10个42  
   print(ivec1.begin(),ivec1.end());  
   vector<int>ivec2(10); 
   vector<int>::size_type ix=0; 
   for(ix;ix<10;++ix) 
   { 
      ivec2[ix]=42; //下标操作 
   } 
   print(ivec2.begin(),ivec2.end());  

   vector<int>ivec3(10); 
   for(vector<int>::iterator iter=ivec3.begin();iter!=ivec3.end();++iter) 
   { 
      *iter=42; //迭代器 
   } 
    print(ivec3.begin(),ivec3.end());

II下面两种方法最佳,他们使用标准库定义的操作,无须再定义vector对象时指定容器的大小。比较灵活且不容易出错. 

方法一:

 vector<int>ivec4; 
 
   vector<int>::iterator iter=ivec4.end(); 
 
   for(int i=0;i!=10;++i) 
 
   { 
      ivec4.insert(iter,42); //在指定位置iter前插入值为的元素,返回指向这个元素的迭代器,  
 
      iter=ivec4.end(); 
   } 
 
   print(ivec4.begin(),ivec4.end());  
 
   vector<int>ivec5;  
 
   vector<int>::size_type cnt=1; 
 
   for(cnt;cnt<=10;++cnt) 
 
   { 
 
      ivec5.push_back(42); //push_back()添加值为的元素到当前vector末尾 
 
   }


   print(ivec5.begin(),ivec5.end());  
 
   int arr[10] = {0,1,2,3,4,5,6,7,8,9};
   vector<int> ivec5(arr,arr+10); // 数组数值


   print(ivec5.begin(),ivec5.end());


}

方法二:

#include <iostream> 
#include <vector> 
using namespace std;
void print(vector<int>::const_iterator beg, vector<int>::const_iterator end)
{
    while(beg != end)
    {
        cout<<*beg++;
        if(beg != end) 
              cout<<" ";
        else cout<<"|";
    }
    cout<<endl;
}




void main()  
{ 
   vector<int>ivec1(10,42); //内置方法,初始化的内容为10个42  
   print(ivec1.begin(),ivec1.end());  
   vector<int>ivec2(10); 
   vector<int>::size_type ix=0; 
   for(ix;ix<10;++ix) 
   { 
      ivec2[ix]=42; //下标操作 
   } 
   print(ivec2.begin(),ivec2.end());  




   vector<int>ivec3(10); 
   for(vector<int>::iterator iter=ivec3.begin();iter!=ivec3.end();++iter) 
   { 
      *iter=42; //迭代器 
   } 
    print(ivec3.begin(),ivec3.end());
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值