0
点赞
收藏
分享

微信扫一扫

C++ —— 关于vector

mjjackey 2024-09-20 阅读 28

目录

链接

1. vector的定义

2. vector的构造

3. vector 的遍历

4. vector 的扩容机制

5. vector 的空间接口

5.1 resize 接口  

 5.2 push_back

5.3 insert 

5.4 erase

5.5 流插入与流提取  

vector 并不支持流插入与流提取,但是可以自己设计,更加灵活方便

6. vector 的不同类型元素 


链接

cplusplus.com/reference/vector/vector/icon-default.png?t=O83Ahttps://cplusplus.com/reference/vector/vector/


1. vector的定义

(constructor)构造函数声明接口说明
vector()无参构造
vector(size_type n, const value_type& val =
value_type())
构造并初始化n个val
vector (const vector& x);拷贝构造
vector (InputIterator first, InputIterator last);使用迭代器进行初始化构

 

2. vector的构造

//模版类只能显式实例化
vector<int> v1;
vector<int> v2(10, 1);

//迭代器初始化
vector<int> v3(v2.begin(), v2.end());
vector<int> v4(++v2.begin(), --v2.end());

 


3. vector 的遍历

void test_vector1()
{
	vector<int> v1;
	vector<int> v2(10, 1);

	vector<int> v3(++v2.begin(), --v2.end());

    //下标遍历
	for (size_t i = 0; i < v3.size(); i++)
	{
		cout << v3[i] << " ";
	}
	cout << endl;

    //迭代器遍历
	vector<int>::iterator it = v3.begin();
	while (it != v3.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;

    // 范围 for 遍历
	for (auto e : v3)
	{
		cout << e << " ";
	}
	cout << endl;
}


4. vector 的扩容机制

 

void TestVectorExpend()
{
	size_t sz;
	vector<int> v;
	sz = v.capacity();
	cout << "capacity changed :" << sz << "\n";
	cout << "make a grow" << endl;
	for (size_t i = 0; i < 100; i++)
	{
		v.push_back(i);
		if (sz != v.capacity())
		{
			sz = v.capacity();
			cout << "capacity changed :" << sz << "\n";
		}
	}
}


5. vector 的空间接口

size获取数据个数
capacity获取容量大小
empty判断是否为空
resize改变vector的size
reserve 改变vector的capacity

5.1 resize 接口  

vector<int> v(10, 1);
cout << v.size() << endl;
cout << v.capacity() << endl;

//小于size
v.resize(5, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;
 
//大于size
v.resize(15, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;

 


void test_vector3()
{
    //10个整形数据1
	vector<int> v(10, 1);
    //申请20空间
	v.reserve(20);
	cout << v.size() << endl;
	cout << v.capacity() << endl;

    //10个整形数据1,补上5个整形数据2
	v.resize(15, 2);
	cout << v.size() << endl;
	cout << v.capacity() << endl;

    //10个整形数据1,5个整形数据2,补上10个整形数据3
	v.resize(25, 3);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
    
    //只保留5个数据
	v.resize(5);
	cout << v.size() << endl;
	cout << v.capacity() << endl;
}

 


                                                通常 vector 支持迭代器插入


 5.2 push_back

//尾插
vector<int> v(10, 1);
v.push_back(10);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;


5.3 insert 

//头插
vector<int> v(10, 1);
v.insert(v.begin(), 1);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

//第一个数+3之后在第三个位置进行插入
v.insert(v.begin() + 3, 1);
for (auto e : v)
{
	cout << e << " ";
}

5.4 erase

//头删
vector<int> v(10, 1);
v.erase(v.begin());
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

//第一个数+3之后删除第三个位置的数据
v.erase(v.begin() + 3);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;

 


5.5 流插入与流提取  

vector<int> v(10);
for (size_t i = 0; i < v.size(); i++)
{
	cin >> v[i];
}
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;


6. vector 的不同类型元素 

 

 

 

 


	//二维数组
    //5个元素的一维数组
	vector<int> v(5, 1);
    //开辟一个10行5列的二维数组
	vector<vector<int>> vv(10, v);

    vv[2][1]=1;
    //这两段代码的意思是相同的
    //vv.operator[](2)operator[](1)=2;

 遍历

 
	//二维数组
    //5个元素的一维数组
	vector<int> v(5, 1);
    //开辟一个10行5列的二维数组
	vector<vector<int>> vv(10, v);

	//使用下标遍历二维数组
	for (int i = 0; i < vv.size(); i++)
	{
		for (int j = 0; j < v.size(); j++)
		{
			cout << vv[i][j] << " ";
		}
		cout << endl;
	}

 

 


感谢观看~

举报

相关推荐

0 条评论