C++ STL vector 容器

文章目录

  • 引用头文件
  • 初始化赋值
    • 1. 一维 vector
    • 2. 二维 vector
  • 遍历 vector 容器
    • 1. 下标索引遍历
    • 2. 迭代器遍历
    • 3. auto
    • 4. range for循环
    • 5. for_each
  • vector 常用方法
    • 判断 vector 是否空
    • 返回数组长度
    • 尾部插入元素
    • 删除尾部元素
    • 调整数组大小
    • 获取迭代器
    • 插入元素
    • 删除元素
    • 排序 sort
    • 翻转 reverse

引用头文件

#include 

初始化赋值

1. 一维 vector

  1. 使用构造函数初始化
//全部初始化为零
vector<int> vec(10, 0);
//全部初始化未指定赋值
vector<int> vec(10);
  1. 拷贝复制
vector list2(list1);
or
vector list2 = list1;
  1. 直接初始化赋值
vector<int> vec = {1, 2, 3};
  1. 使用数组初始化赋值
int arr[] = {11, 32, 41, 25, 67, 100, 88, 233}; // 列表初始化内置数组

// 指出拷贝区域范围,使用数组初始化 vector 对象
vector<int> iv(begin(arr), end(arr));  // 遍历 iv 数据:11 32 41 25 67 100 88 233
vector<int> jv(arr + 2, arr + 7);      // 遍历 iv 数据:41 25 67 100 88

2. 二维 vector

  1. 使用构造函数初始化
//10行6列,全部初始化为零
vector<vector<int>> vec(10, vector<int>(6, 0));
  1. 拷贝复制
vector> vec(vec1);
  1. 直接初始化赋值

vector<vector<int>> vec = {
    {1, 2, 3},
    {4, 5, 6},
};
  1. 使用数组初始化赋值
// 初始化一个 二维vector 行row,第二个参数为一维vector;
vector<vector<int> > vecto(row,vector<int>(vt[0].begin()+1,vt[0].begin()+3));

遍历 vector 容器

1. 下标索引遍历

void PrintfVector(vector<int> v)
{
    for(unsigned int i = 0; i < v.size(); ++i) {
		cout<<v[i]<<" ";
	}
	cout<<endl;
}

2. 迭代器遍历

void PrintfVector(vector<int> v)
{
	// 注:如果参数为const vector 需要用const_iterator
	// vector::const_iterator iter=v.begin();
	
	for(vector<int>::iterator it = v.begin(); it != v.end(); ++it)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;
}

3. auto

void PrintfVector(vector<int> v)
{
	// 注:如果参数为const vector 需要用const_iterator
	// vector::const_iterator iter=v.begin();
	
	for(auto it = v.begin(); it != v.end(); ++it)
	{
		cout<<(*it)<<" ";
	}
	cout<<endl;
}

4. range for循环

void PrintfVector(vector<int> v)
{
	// 注:如果参数为const vector 需要用const_iterator
	// vector::const_iterator iter=v.begin();
	
	for(auto val : v)
	{
		cout<<( val )<<" ";
	}
	cout<<endl;
}

5. for_each

for_each(iterator beg, iterator end, _callback);

vector<int> v = {3,5,1,7,10};   // vector容器
 
auto print = [](const auto& x)  // 定义一个lambda表达式
{
    cout << x << ",";
};
for_each(cbegin(v), cend(v), print);// for_each算法
 
for_each(                      // for_each算法,内部定义lambda表达式
    cbegin(v), cend(v),        // 获取常量迭代器
    [](const auto& x)          // 匿名lambda表达式
    {
        cout << x << ",";
    }
);

vector 常用方法

判断 vector 是否空

v.empty() 如果 v 为空,则返回 true, 否则返回 false

返回数组长度

v.size(a) 返回数组 v 的长度

尾部插入元素

v.push_back(a) 将元素a插入到数组v的尾部

删除尾部元素

v.pop_back() 删除最后一个数据

调整数组大小

v.resize(n,m) 重新调整数组大小为n,如果n比原来的小则删除多余信息;如果n比原来大则新增部分初始化为m,其中m可以省略

获取迭代器

方法 说明
v.begin() 返回数组v首元素(也就是v[0])的迭代器
v.end() 返回数组v末尾元素下一个元素的迭代器,为空指针,不指向任何元素
v.cbegin() 和 v.cend() C++11新增,它们返回一个const的迭代器,不能用于修改元素

插入元素

方法 说明
v.insert(pos,elem) 在pos位置插入一个elem拷贝,传回新数据位置。
v.insert(pos,n,elem) 在pos位置插入n个elem数据。无返回值。
v.insert(pos,beg,end) 在pos位置插入在[beg,end)区间的数据。无返回值。

删除元素

方法 说明
v.erase(pos) 删除pos位置的数据,传回下一个数据的位置
v.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置

排序 sort

#include

sort(vec.begin(),vec.end()); // (默认是按升序排列,即从小到大)

bool Comp(const int &a,const int &b)  
{  
    return a>b;  
}  
sort(vec.begin(),vec.end(),Comp) // 这样就降序排序。

翻转 reverse

#include

// 将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.)
reverse(vec.begin(),vec.end()); 

你可能感兴趣的:(C/C++,c++,STL,vector)