vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。
使用之前现包含头文件
#include <vector>
1 初始化的方式
语法:
vector();
vector( size_type num, const TYPE &val );
vector( const vector &from );
vector( input_iterator start, input_iterator end );
/* 初始化 */
vector<int> a(10); //定义了10个整形元素(尖括号内中为元素类型名,它可以是任何合法的数据类型),并且没有给出初值
vector<int> b(10, 2); //定义了10个整形元素的向量,并且每个元素的初值为1
vector<int> c(b); //用b向量来创建c,整体复制性赋值
vector<int> d(b.begin(), b.begin()+3); //定义了d值为b中的第0个到第2个(共3个)元素
int e[7]={1,2,3,4,5,6,7};
vector<int> f(e, e+7); //从数组中获得初值
2 assign函数
语法:
void assign( input_iterator start, input_iterator end );
void assign( size_type num, const TYPE &val );
assign() 函数要么将区间[start, end)的元素赋到当前vector,或者赋num个值为val的元素到vector中.这个函数将会清除掉为vector赋值以前的内容.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
/* 初始化 */
vector<int> a(10); //定义了10个整形元素(尖括号内中为元素类型名,它可以是任何合法的数据类型),并且没有给出初值
vector<int> b(10, 2); //定义了10个整形元素的向量,并且每个元素的初值为1
/*打印 a的大小 */
std::cout<<"未赋值前a的大小为 "<< a.size() <<std::endl;
std::cout<<"直接赋值"<<std::endl;
a.assign(9, 1);
for (auto i = a.begin(); i != a.end(); i++) {
std::cout << *i << ' ';
}
std::cout<<std::endl;
std::cout<<"直接赋值后a的大小为 "<<a.size()<<std::endl;
std::cout<<std::endl;
std::cout<<"将b的值赋值给a"<<std::endl;
a.assign(b.begin(), b.begin() + 4); //将b的0~3共四个元素赋值给a
for (auto i = a.begin(); i != a.end(); i++) {
std::cout << *i << ' ';
}
std::cout<<std::endl;
std::cout<<"通过b赋值后a的大小为 "<< a.size() <<std::endl;
}
3 at函数
语法:
TYPE at( size_type loc );
at() 函数 返回当前Vector指定位置loc的元素的引用. at() 函数 比 [] 运算符更加安全, 因为它不会让你去访问到Vector内越界的元素.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
/* 初始化 */
vector<int> a(10); //定义了10个整形元素(尖括号内中为元素类型名,它可以是任何合法的数据类型),并且没有给出初值
vector<int> b(10, 2); //定义了10个整形元素的向量,并且每个元素的初值为1
a.assign(10, 1);
for(int i = 0; i<15; i++){
cout<<"元素" <<i<<" = " <<a.at(i)<<endl;
}
}
取代试图访问内存里非法值的作法,at() 函数能够辨别出访问是否越界并在越界的时候抛出一个异常.
4 back 函数
语法:
TYPE back();
back() 函数返回当前vector最末一个元素的引用
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
/* 初始化 */
vector<int> a(10); //定义了10个整形元素(尖括号内中为元素类型名,它可以是任何合法的数据类型),并且没有给出初值
for( int i = 0; i < 10; i++ ) {
/* 将i添加到a的末尾 */
a.push_back(i);
}
cout<<"第一个元素是 "<<a.front()<<" 最后一个元素是 "<<a.back()<<endl;
}
5 begin 函数 和 end 函数
语法:
iterator begin();
begin()函数返回一个指向当前vector起始元素的迭代器.例如,下面这段使用了一个迭代器来显示出vector中的所有元素。
语法:
iterator end();
end() 函数返回一个指向当前vector末尾元素的下一位置的迭代器.注意,如果你要访问末尾元素,需要先将此迭代器自减1.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
/* 初始化 */
vector<int> a(10, 789); //定义了10个整形元素(尖括号内中为元素类型名,它可以是任何合法的数据类型),并且没有给出初值
vector<int>::iterator it;
for( int i = 0; i < 10; i++ ) {
/* 将i添加到a的末尾 */
a.push_back(i);
}
for(it = a.begin(); it != a.end(); it++){
cout<<"元素 "<< " = " << *it<<endl;
}
}