您的位置:首页 > 其它

初步STL集装箱Vector

2015-07-17 20:48 302 查看

vector

特点:

1.可变长的动态数组

2.使用时包括头文件 #include <vector>

3.支持随机訪问迭代器

• 依据下标随机訪问某个元素时间为常数

• 在尾部加入速度非常快

• 在中间插入慢

成员函数

初始化

vector();              初始化成空
vector(int n);               初始化成有n个元素
vector(int n, const T & val);     初始化成有n个元素, 每一个元素的值都是val,类型是T
vector(iterator first, iterator last);  初始化为与别的容器上区间[first, last)一致的内容


举例:

1.创建一个int类型的空的vector对象:

  vector<int> intvec;

2.创建一个包括5个int类型数据的vector:

  vector<int> intvec(5);

3.创建一个包括5个int类型数据的vector,而且都初始化为2:

vector<int> intvec(5, int(2));

4.通过复制某vec容器来创建

vector<int> intvec(vec.begin+M,vec.begin+N)

元素的訪问

intvec.at(index)

返回由index指定的位置上的元素

intvec[index]

返回由index指定的位置上的元素

举例:

include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec(10);
for (int i = 0;i != vec.size();i++)
{
vec.at(i) = i;
//vec[i] = i ;
}

for (int i = 0;i != vec.size();i++)
{
cout << vec.at(i)<<endl;
//cout <<vec[i]<<endl;
}

return 0;
}


容器的大小

表达式

作用

intvec.capacity()

返回不又一次分配空间能够插入到容器intvec中的元素的最大个数

intvec.empty()

容器intvec为空。返回true;否则,返回false

Intvec.size()

返回容器intvec中当前的个数

intvec.resize(num)

将元素个数改为num。假设size()添加,默认的构造函数负责创建这些新元素

intvec.resize(num, elem)

将元素个数改为num。

假设size()添加,默认的构造函数将这些新元素初始化为elem

举例:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec1;
cout << vec1.empty()<<endl; //返回1
cout << vec1.size()<<endl;  //返回0

vector<int> vec2(20);
cout << vec2.empty()<<endl; //返回0
cout << vec2.size()<<endl;  //返回20

vector<int> vec3(15,1);
cout << vec3.capacity()<<endl;//返回15
vec3.push_back(1);
cout << vec3.size()<<endl;  //返回16
cout << vec3.capacity()<<endl;//返回30
//数组不够时。下次又一次分配时会扩大为两倍

return 0;
}


容器的操作

语句

作用

intvec.clear()

从容器中删除全部元素

intvec.erase(position)

删除由position指定的位置上的元素

intvec.erase(beg,end)

删除从beg到end-1之间的全部元素

intvec.insert(position, elem)

将elem的一个拷贝插入到由position指定的位置上,并返回新元素的位置

intvec.inser(position, n, elem)

将elem的n个拷贝插入到由 position指定的位置上

intvec.insert(position, beg, end)

将从beg到end-1之间的全部元素的拷贝插入到intvec中由position指定的位置上

intvec.push_back(elem)

将elem的一个拷贝插入到vector的末尾

intvec.pop_back()

删除最后元素

intvec.front()

返回第一个元素的引用,不检查容器是否为空

Intvec.back()

返回最后一个元素的引用,不检查容器是否为空

#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec(10,1);
cout<<vec.empty()<<endl;  //返回0
vec.clear();
cout<<vec.empty()<<endl;  //返回1

vector<int> vec1(1,1);
vec1.insert(vec1.begin()+1,2); //在该位置插入,把原来该位置以其以后的元素总体后移
for(int i = 0;i != vec1.size();i++)
cout<<vec1.at(i);  //12
cout<<endl;

vec1.push_back(3);
for(int i = 0;i != vec1.size();i++)
cout<<vec1.at(i);  //123
cout<<endl;

vec1.pop_back();
vec1.pop_back();
for(int i = 0;i != vec1.size();i++)
cout<<vec1.at(i);  //1
cout<<endl;

return 0;
}


#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vec(10,1);
vec.push_back(2);//12

cout<<vec.front()<<endl;  //返回1
cout<<vec.back()<<endl;  //返回2

int &head = vec.front();
head++;
int &tail = vec.back();
tail--;
cout<<vec.front()<<endl;  //返回2
cout<<vec.back()<<endl;  //返回1

return 0;
}


二维数组

vector< vector<int> > v(3);

//v有3个元素,

//每一个元素都是vector<int> 容器

#include <iostream>
#include <vector>
using namespace std;
int main() {
vector< vector<int> > v(3);
for(int i=0; i<v.size(); ++i)
for(int j=0; j<4; ++j)
v[i].push_back(j);
for(int i=0; i<v.size(); ++i){
for(int j=0; j<v[i].size(); ++j)
cout<<v[i][j]<<" ";
cout<<endl;
}
return 0;
}


输出:

0 1 2 3

0 1 2 3

0 1 2 3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: