C++语法知识点-vector+子数组

一维数组定义

Vector是一个封装了动态大小数组的顺序容器(Sequence
Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

无参数

在这里插入图片描述

有参数

#include<iostream>
#include<vector>
using namespace std;
class p
{
public:
	p(int a=2,int b=3)
	{
		_a = a;
		_b = b;
	}
	void print()
	{
		printf("%d ", _a);
		printf("%d ", _b);
		
	}
private:
	int _a;
	int _b;
	

};
void test2()
{
	p d1(55,66);
	vector<p> v1(2);
	vector<p> v2(2, d1);
	cout << "接下来开始打印v1的内容:" << endl;
	for (auto v : v1)
	{
		v.print();
	}
	cout << "接下来开始打印v2的内容:" << endl;
	for (auto v : v2)
	{
		v.print();
	}
}
int main()
{
	test2();
	system("pause");
	return 0;
}

在这里插入图片描述

迭代器

//迭代器进行初始化创建出来的对象        
vector<Date>::iterator it1 = v.begin() + 1;        
vector<Date>v1(it1, v.end() - 1);        
//访问v1数组就是访问v数组        
  • 并且可以通过 *it 来访问vector里的元素
#include<iostream>
#include<vector>
using namespace std;
int main() {
    vector<int> v;
    v.push_back(1);	//依次输入1、 2、 3 
    v.push_back(2);
    v.push_back(3);
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }

    return 0;
}

扩容操作reserve

动态数组的容量是不断的根据输入的数据的大小变化的,但是增加了reserve函数可以提前就进行扩展数组的容量

void test5()
{
	vector<p> v1(5);
	cout << v1.size() << endl;
	cout << v1.capacity() << endl;
	v1.reserve(100);
	v1.push_back(p(11, 22));

	cout << v1.size() << endl;
	cout << v1.capacity() << endl;
}
  • capacity()//求出数组容量的函数

-

二维数组 vector 定义

二维vector数组vector Arrayname[size]; Arrayname[]中的每一个元素都是一个vector。我们可以把二维vector数组当做两个维都可以变长的二维数组来理解。

创建m*n的二维vector

  • 定义二维数组时候需要注意的事项
    vector<vector> A;//错误的定义方式
    vector<vector > A;//正确的定义方式

vector<vector >nums(m, vector(n)); //m*n的二维vector

定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。

vector< vector > v(m, vector(n) )

定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0

初始化定义

初始化:
vector a(5); //初始化5个值为0的元素
vector a(5, 1);//定义了5个整型元素的向量,且给出每个元素的初值为1
int b[7] = { 1,2,3,4,5,9,8 }; vector a(b, b + 7); //从数组中获得初值

vector a(b.begin(), b.begin + 3); //定义了a值为b中第0个到第2个(共3个)元素

vector v{ 1,2,3,4,5 }; //使用花括号赋值

vector常用函数的实例分析

访问操作

  • 普通数组访问
    定义为vector v 的vector容器,可以使用 v[0]、v[1]、v[2]…这种方式来访问。当然,下标不能越界(v.size() - 1之内)。
    注:v[0]、v[1]、v[2]等价于* (v.begin())、* (v.begin() + 1)、* (v.begin() + 2)。
  • 迭代器访问
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}

resize 函数

是一个替换字符串长度的函数,有两个重载函数,第一个参数都是替换之后的大小,第二个为替换的字母

在这里插入图片描述

在这里插入图片描述

  • 之后字符串未改变是因为resize(n)中的n 比原来的长度大,空字符为‘\0’
  • a.resize(12, ‘a’) 将新扩展的空间填充为字符‘a

push _back ( )

vector对象里面这个函数的作用就是往数组后面插入数据
在这里插入图片描述

pop_back()函数

//pop_back()表示删除vector尾部的元素

在这里插入图片描述

size():

size()用来获得vector中元素的个数

insert()

insert(it, x)用来向vector的任意迭代器it处插入一个元素x

在这里插入图片描述

insert(pos,first,last)

  • insert(pos,first,last) 在 pos 位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素(简单说就是把两个容器拼接在一起)。
#include<iostream>
#include<vector>
using namespace std;

int main() {
	vector<int> v, v1, v2;
	for (int i = 1; i <= 5; i++) v.push_back(i);
	for (int i = 10; i <= 13; i++) v1.push_back(i);
	//for (int i = 20; i <= 23; i++) v2.push_back(i);
	v.insert(v.end(), v1.begin(), v1.end());  

	//v.insert(v.end(), v2.begin(), v2.end());
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}



	return 0;
}

在这里插入图片描述

assign

这个函数的作用就是将对象原来的内容全部清空,将你给的内容填入到该对象的空间里面去

用迭代器进行访问

	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}
  • 下面是各种不同情况赋值操作
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int>  v = { 1,2,3,4,5,6,7,8,9,10 };


	//v.assign(10, 0);

	/*vector<int> p;
	p.assign(v.begin(), v.end());*/
	
	/*v.assign({ 666,667,668 });
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
		cout << *it << " ";
	}*/




	return 0;

}

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

在这里插入图片描述

sort

排序

sort(v.begin(),v.end());

front

返回vector中的第一个元素

back

返回vector中的最后一个元素

子数组相关问题

typeid

获知变量类型名称,可以使用 typeid(变量).name()

#include<iostream>
#include<vector>
using namespace std;
int main()
{

	//int a = 3;
	//if (typeid(a) == typeid(int))
	//{
	//	cout << "int" << endl;
	//}
	//return 0;
	int a = 1;
	double b = 3.14;
	cout << typeid(a).name() << endl;
	cout << typeid(b).name() << endl;
	return 0;

}

在这里插入图片描述

auto

使用auto自动识别变量类型

#include<iostream>
#include<vector>  
using namespace std;  
int main()  
{

	auto a = 2;  
	auto b = 3.14;  
	auto c = "r";  
	cout << typeid(a).name() << endl;  
	cout << typeid(b).name() << endl;  
	cout << typeid(c).name() << endl;  

	return 0;  

}

遍历数组

#include<iostream>
#include<vector>
using namespace std;
int main()
{

	//普通的遍历数组操作
	int a[] = { 1,2,3,4,5,6,7 };
	//for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
	//{
	//	cout << a[i] << " ";
	//}
	//cout << endl;

	//使用auto关键字进行操作
	for (auto i : a)
	{
		cout << i << " ";
	}
	cout << endl;



	return 0;

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[1\]中的代码展示了使用vector来创建一个二维数组,并使用resize函数来指定数组的大小。而引用\[2\]中的代码则展示了另一种创建二维数组的方法,直接在vector的构造函数中指定数组的大小。这两种方法都可以用来创建二维数组,只是在语法上稍有不同。 UEC++中的数组和vector的区别在于它们的实现方式和功能。数组是一种固定大小的数据结构,它在内存中是连续存储的,可以通过索引来访问元素。而vector是一种动态数组,它可以根据需要自动调整大小,并且可以在任意位置插入或删除元素。 另外,数组的大小在编译时就确定了,而vector的大小可以在运行时动态改变。这使得vector更加灵活,可以根据实际需求来动态管理内存。 此外,vector还提供了一些方便的成员函数,如push_back和pop_back,可以在数组的末尾插入和删除元素。而数组则没有这些功能,需要手动实现。 总结来说,数组适用于固定大小的数据集合,而vector适用于需要动态管理大小的数据集合。在UEC++中,使用数组还是vector取决于具体的需求和使用场景。 #### 引用[.reference_title] - *1* *2* [C++容器嵌套实现动态二维数组(Vector2D)](https://blog.csdn.net/diezhai9068/article/details/101201579)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [UEC++ FString的那些事](https://blog.csdn.net/Ez_coder/article/details/118530317)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直爱莲子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值