c++ vector容器构造与数据存放

  Vertor容器是什么?

         在 C++ 的标准模板库(STL)中,std::vector 是一种序列容器,它封装了动态大小数组的行为。vector 容器允许用户在序列的尾部高效地添加(或删除)元素,并能够像普通数组一样通过索引访问元素。

类似于单链数组,可以进行动态扩展,若原空间不足,而是找一个更大的空间,将数据复制到新空间,然后十分原来的空间

std::vector 容器的一些主要特性:

  1. 动态数组std::vector 可以根据需要自动调整大小,这使得它能够存储任意数量的元素。

  2. 连续内存存储std::vector 在内存中为元素分配连续的空间,这意味着它能够提供对元素的快速随机访问。

  3. 随机访问迭代器std::vector 提供了随机访问迭代器,允许用户以常数时间复杂度访问任何元素。

  4. 在尾部高效地添加和删除元素std::vector 支持在序列尾部快速地添加(push_back)和删除(pop_back)元素。

  5. 容量和大小std::vector 维护了容器的当前大小(size)和分配的内存容量(capacity),容量通常大于或等于大小。

  6. 范围检查:与普通数组不同,std::vector 在访问超出其大小的元素时会抛出异常(默认情况下),这有助于避免越界错误。

  7. 容器操作std::vector 提供了多种操作,如插入(insert)、删除(erase)、清空(clear)和反转(reverse)等。

  8. 构造函数和析构函数std::vector 有多种构造函数,允许用户创建具有特定大小或初始化值的向量,以及从现有数组或迭代器范围初始化的向量。

  9. 内存管理std::vector 自动管理内存分配和释放,用户不需要手动管理内存。

  10. 模板类型std::vector 是一个模板类,可以存储任何类型的元素,包括用户定义的类型。

向vector容器存放内置数据

实例代码+注释

#include
#include
#include//标准算法头文件
using namespace std;
void test()
{
	//创建一个vector容器,表示一个动态数组,用于存储整数类型的元素。
	vectorv;
	//向容器中插入数据
	v.push_back(10);
	v.push_back(10);
	v.push_back(10);
	v.push_back(10);
	//通过迭代器访问容器中 数据
	// ::iterator:这是 std::vector 类的一个类型定义,它定义了可以遍历向量元素的迭代器类型。
	//itBegin:这是一个变量名,用于存储迭代器
	//v.begin():这是一个成员函数,它返回一个指向向量 v 的第一个元素的迭代器。
	//v.end():它返回一个指向向量 v 的最后一个元素的指针,结束迭代器
	vector::iterator itBegin = v.begin();
	vector::iterator itEnd = v.end();

	//遍历方式
	for (vector::iterator it = v.begin(); it != v.end(); it++)
	{
		cout << *it << endl;
	}
}

利用标准算法遍历 for_each

需要包含标准算法头文件#include

void print(int val)
{
	cout << val << endl;
}
for_each(v.begin(), v.end(), print);

vector容器中存放自定义数据类型

class Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}
	string m_Name;
	int m_Age;
};

void test()
{
	//创建vector容器 v  存放Person类型数据
	vectorv;
	Person p1("a", 10);
	Person p2("b", 20);
	Person p3("b", 30);
	//尾插法向容器中添加数据
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	//遍历容器中数据
	for (vector::iterator it = v.begin(); it != v.end(); it++)
	{
		//it本质 是一个指针,取值需要解引用
		cout << "姓名: " << (*it).m_Name << "年龄: "<< (*it).m_Age << endl;
	}
}

存放地址数据!

vector存放是的person* 是一个指针类型数据,容器中存放的是地址!其中(*it)是解引用出来的一个指针,利用指针拿到数据。

(**it)是先解引用得到Person类型的一个指针,然后再次解引用得到Person本身,随后就可以操作里面的数据了。

void test()
{
	//创建vector容器 v  存放Person类型数据
	vectorv;
	Person p1("a", 10);
	Person p2("b", 20);
	Person p3("b", 30);
	//尾插法向容器中添加数据
	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	//遍历容器中数据
	for (vector::iterator it = v.begin(); it != v.end(); it++)
	{
		//it本质 是一个指针,取值需要解引用
		cout << "姓名: " << (**it).m_Name << "年龄: "<< (**it).m_Age << endl;
		//也可以
		cout << "姓名: " << (*it)->m_Name << "年龄: " << (*it)->m_Age << endl;
	}
}

Vector容器的构造函数

默认构造 无参构造

void test1()
{
	vectorv1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}
}

通过区间方式构造

将v.begin(),于v.end()区间中的数据拷贝给其本身

vectorv2(v1.begin(),v1.end())

构造n个elem拷贝给本身  例:往容器中放入 十个100

vectorv3(10,100)

拷贝构造 将v3复制传给v4

vectorv4(v3)

你可能感兴趣的:(C++学习笔记,c++,开发语言)