c++vector对象初始化

时间:2021-05-20 23:39:08

C++vector对象初始化

因为最近在准备C++,用到了vector STL,但是发现自己完全不太会用,所以上网查了一下一些常用的初始化方法(其实就是把vector当做一个安全的动态数组即可),其他使用方法基本类似于C的数组,主要是初始化有些多元化,这里详细列举一下。

下面代码用到的两个iter量声明

 vector<int>::iterator int_ite;
 vector<string>::iterator string_ite;

申请n个元素(或者进行初始化)

 //vector<T> v(n)形式,v包含n 个元素
 vector<int> ivec1(10);
 //vector<T> v(n,i)形式,v包含n 个值为 i 的元素
 vector<int> ivec(10,0);
 for(int_ite=ivec.begin ();int_ite!=ivec.end ();int_ite++)
  cout<<"ivec: "<<*int_ite<<endl;

拷贝一份已有的vector

 //vector<T> v(v1)形式,v是v1 的一个副本
 vector<int> ivec1(ivec);
 for(int_ite=ivec1.begin ();int_ite!=ivec1.end ();int_ite++)
  cout<<"ivec1: "<<*int_ite<<endl;

这里ivec是一个已有的vector,那么这种初始化方式会拷贝一份ivec,其为ivec1

用int/string数组初始化vector数组

 //数组初始化vector
 int iarray[]={1,2,3,4,5,6,7,8,9,0};
 //count: iarray数组个数
 size_t count=sizeof(iarray)/sizeof(int);
 //int数组初始化 ivec3 
 vector<int> ivec3(iarray,iarray+count);
 for(int_ite=ivec3.begin ();int_ite!=ivec3.end ();int_ite++)
  cout<<"ivec3: "<<*int_ite<<endl;

 //string数组初始化 svec1
 string word[]={"ab","bc","cd","de","ef","fe"};
 //s_count: word数组个数
 size_t s_count=sizeof(word)/sizeof(string);
 //string数组初始化 svec1 
 vector<string> svec1(word,word+s_count);
 for(string_ite=svec1.begin ();string_ite!=svec1.end ();string_ite++)
  cout<<"svec1: "<<*string_ite<<endl;

这里主要是注意vector初始化的第二个入参是数组(指针)+数组长度

应该就是指到数组尾,然后把这段地址空间的全部拷贝进vector……

使用back_inserter函数初始化vector

其实按照C++的定义来说,这个不算初始化……应该是赋值。。。

//用 back_inserter 函数
 vector<int> ivec4;  //空对象
 fill_n(back_inserter(ivec4),10,3);  //10个3 填充ivec4.
 for(int_ite=ivec4.begin ();int_ite!=ivec4.end ();int_ite++)
  cout<<"ivec4: "<<*int_ite<<endl;

}