vector容器

vector容器

vector容器封装了动态数组。
包含头文件: #include
vector类模板的声明:

template<class T, class Alloc = allocator<T>>
class vector{
private:
	T *start_; 
	T *finish_;
	T *end_;
	……
}

构造函数

1vector();  // 创建一个空的vector容器。
2vector(initializer_list<T> il); // 使用统一初始化列表。
3vector(const vector<T>& v);  // 拷贝构造函数。
4vector(Iterator first, Iterator last);  // 用迭代器创建vector容器。
5vector(vector<T>&& v);  // 移动构造函数(C++11标准)。
6explicit vector(const size_t n);   // 创建vector容器,元素个数为n(容量和实际大小都是n)。
7vector(const size_t n, const T& value);  // 创建vector容器,元素个数为n,值均为value。
void testOne()
{
	vector<int> v1;
	cout <<" v1.capacity() = " << v1.capacity() <<"\tv1.size() = "<< v1.size() <<"\tv1.empty() = " << v1.empty() << endl;

	vector<int> v2(10);
	cout << " v2.capacity() = " << v2.capacity() << "\tv2.size() = " << v2.size() << "\tv2.empty() = " << v2.empty() << endl;

	vector<int> v3(v2);
	cout << " v3.capacity() = " << v3.capacity() << "\tv3.size() = " << v3.size() << "\tv3.empty() = " << v3.empty() << endl;
	
	vector<int> v4(5,10);
	cout << " v4.capacity() = " << v4.capacity() << "\tv4.size() = " << v4.size() << "\tv4.empty() = " << v4.empty() << endl;

	vector<int> v5({ 1,2,3,4,5,6 });
	cout << " v5.capacity() = " << v5.capacity() << "\tv5.size() = " << v5.size() << "\tv5.empty() = " << v5.empty() << endl;

	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < v2.size(); i++) {
		cout << v2[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < v3.size(); i++) {
		cout << v3[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < v4.size(); i++) {
		cout << v4[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < v5.size(); i++) {
		cout << v5[i] << " ";
	}
	cout << endl;
}

在这里插入图片描述

特性操作

size_t max_size() const;     // 返回容器的最大长度,此函数意义不大。
size_t capacity() const;      // 返回容器的容量。
size_t size() const;          // 返回容器的实际大小(已使用的空间)。
bool empty() const;        // 判断容器是否为空。
void clear();               // 清空容器。
void reserve(size_t size);   // 将容器的容量设置为至少size。
void shrink_to_fit();	       // 将容器的容量降到实际大小(需要重新分配内存)。
void resize(size_t size);    // 把容器的实际大小置为size。
void resize(size_t size,const T &value);  // 把容器的实际大小置为size,如果size<实际大小,
void testTwo()
{
	vector <int>v1({1,2,3});
	cout << v1.size() << endl;
	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i]<<" ";
	}
	cout << endl;
	v1.clear();
	cout << v1.size() << endl;
	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i] << " ";
	}
}

在这里插入图片描述

元素操作

T &operator[](size_t n); 
const T &operator[](size_t n) const;  // 只读。
T &at(size_t n); 
const T &at(size_t n) const;          // 只读。
T *data();            // 返回容器中动态数组的首地址。
const T *data() const; // 返回容器中动态数组的首地址。
T &front();        // 第一个元素。
const T &front();  // 第一个元素,只读。
const T &back();  // 最后一个元素,只读。
T &back();        // 最后一个元素。

void testTwo()
{
	vector <int>v1({1,2,3});
	cout << v1.size() << endl;
	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i]<<" ";
	}
	cout << endl;
	v1.clear();
	cout << v1.size() << endl;
	for (int i = 0; i < v1.size(); i++) {
		cout << v1[i] << " ";
	}

	cout << "----------" << endl;
	vector <int>v2({ 1,2,3 ,4,5,6 });
	cout << v2.at(0) << " " << v2[2] << " " << endl;
	cout << v2.data() <<" " << v2.data()+1<<endl;  //一个Int占4字节
	cout << v2.front() << " " << v2.back() << endl;

}

在这里插入图片描述
赋值操作

1)vector &operator=(const vector<T> &v);    // 把容器v赋值给当前容器。
2)vector &operator=(initializer_list<T> il); // 用统一初始化列表给当前容器赋值。
3void assign(initializer_list<T> il);        // 使用统一初始化列表赋值。
4void assign(Iterator first, Iterator last);  // 用迭代器赋值。
5void assign(const size_t n, const T& value);  // 把n个value给容器赋值。
void testThree()
{
	vector<int> v1;
	v1 = { 1,2,3,4,5 };     // 使用统一初始化列表赋值。
	for (int ii = 0; ii < v1.size(); ii++) cout << v1[ii] << "  ";
	cout << endl;

	vector<int> v2;
	v2 = v1;                    // 把容器v1赋值给当前容器。
	for (int ii = 0; ii < v2.size(); ii++) cout << v2[ii] << "  ";
	cout << endl;

	vector<int> v3;
	v3.assign({ 1,2,3,4,5 });   // 用assign()函数给当前容器赋值,参数是统一初始化列表。
	for (int ii = 0; ii < v3.size(); ii++) cout << v3[ii] << "  ";
	cout << endl;

}

在这里插入图片描述
交换操作

void swap(vector<T> &v);    // 把当前容器与v交换。

插入和删除

1void push_back(const T& value);  // 在容器的尾部追加一个元素。
2void emplace_back();           // 在容器的尾部追加一个元素,…用于构造元素。C++11
3)iterator insert(iterator pos, const T& value);  // 在指定位置插入一个元素,返回指向插入元素的迭代器。
4)iterator emplace (iterator pos,);  // 在指定位置插入一个元素,…用于构造元素,返回指向插入元素的迭代器。C++11
5)iterator insert(iterator pos, iterator first, iterator last);  // 在指定位置插入一个区间的元素,返回指向第一个插入元素的迭代器。
6void pop_back();                      // 从容器尾部删除一个元素。
7)iterator erase(iterator pos);             // 删除指定位置的元素,返回下一个有效的迭代器。
8)iterator erase(iterator first, iterator last); // 删除指定区间的元素,返回下一个有效的迭代器。

在这里插入图片描述
在这里插入图片描述

	vector<AA> v1(10);
	cout <<" v1.size() = " << v1.size() ;
	cout <<"\t\tv1.data() = " << v1.data() << endl;
	AA c(18,"西施1"); 
	AA d(19, "西施2");
	AA e(20, "西施3");
	//v1.push_back(c);
	//v1.push_back(d);
	//v1.push_back(e);

	v1.emplace_back(c);
	v1.emplace_back(d);
	v1.emplace_back(e);
	for (int i = 0; i < v1.size(); i++) {
		cout << v1.at(i).m_bh << " " << v1.at(i).m_name << endl;
	}
	cout << endl;

在这里插入图片描述

vector嵌套

void testFour()
{
	vector<vector<int>> vv;   // 创建一个vector容器vv,元素的数据类型是vector<int>。

	vector<int> v;        // 创建一个容器v,它将作为容器vv的元素。

	v = { 1,2,3,4,5 };      // 用统一初始化列表给v赋值。
	vv.push_back(v);    // 把容器v作为元素追加到vv中。

	v = { 11,12,13,14,15,16,17 };   // 用统一初始化列表给v赋值。
	vv.push_back(v);                      // 把容器v作为元素追加到vv中。

	v = { 21,22,23 };     // 用统一初始化列表给v赋值。
	vv.push_back(v);    // 把容器v作为元素追加到vv中。

	// 用嵌套的循环,把vv容器中的数据显示出来。
	for (int ii = 0; ii < vv.size(); ii++)
	{
		for (int jj = 0; jj < vv[ii].size(); jj++)
			cout << vv[ii][jj] << " ";      // 像二维数组一样使用容器vv。

		cout << endl;
	}

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值