C艹的动态数组(std::vector)
在std命名空间中vector动态数组
可以随意增加减少,规定了类型,可存放对象
在指定位置时需要用到==迭代器==
-
构造函数:
vector()
: 默认构造函数。vector(size_type n)
: 构造一个包含 n 个元素的vector
。vector(size_type n, const value_type& val)
: 构造一个包含 n 个初始化为 val 的元素的vector
。vector(const vector& x)
: 拷贝构造函数。vector(vector&& x)
: 移动构造函数。vector(initializer_list<value_type> il)
: 列表初始化。
-
赋值运算符:
operator=
: 赋值运算符,可以是拷贝赋值或移动赋值。
-
元素访问:
operator[]
: 访问指定位置的元素。at()
: 访问指定位置的元素,带边界检查。front()
: 返回vector
的第一个元素。back()
: 返回vector
的最后一个元素。data()
: 返回指向vector
中第一个元素的指针。
-
迭代器:
begin()
,end()
: 返回指向vector
开始和结束位置的迭代器。rbegin()
,rend()
: 返回vector
的反向迭代器,指向vector
末尾和开始。
-
容量相关:
empty()
: 检查vector
是否为空。size()
: 返回vector
中的元素个数。max_size()
: 返回vector
可能容纳的最大元素个数。reserve()
: 改变vector
容量。capacity()
: 返回vector
当前的容量。shrink_to_fit()
: 尝试减少容量以节省空间。
-
修改操作:
push_back()
: 在vector
的末尾添加一个元素。emplace()
: 在指定位置直接构造元素。emplace_back()
: 在vector
末尾直接构造元素。pop_back()
: 移除vector
的最后一个元素。insert()
: 在指定位置插入一个元素或多个元素。erase()
: 移除指定位置的元素或一个范围内的元素。clear()
: 移除所有元素,使其大小为0。resize()
: 改变vector
中元素的数量。swap()
: 与另一个vector
交换内容。shrink_to_fit()
: 请求容器减少其capacity()
以适应其size()
,帮助节省内存。
下面为实例
#include "iostream"
#include "vector"
struct Vertex {
float x, y, z;
Vertex(int x, int y, int z) : x(x), y(y), z(z) {
}
Vertex(const Vertex &ZZ) : x(ZZ.x), y(ZZ.y), z(ZZ.z) {//复制构造函数
std::cout << "diaoyong" << std::endl;
}
};
std::ostream &operator<<(std::ostream &stream, const Vertex &abc) {
stream << abc.x << "," << abc.y << "," << abc.z;
return stream;
}
int main() {
std::vector<Vertex> ABC;
ABC.reserve(3);//规定初始空间(减少push_back添加产生的复制)
ABC.push_back({1, 2, 3});
ABC.push_back({3, 6, 3});
ABC.push_back({3, 6, 3});//直接添加元素,会产生复制
ABC.emplace_back(3, 6, 3);
ABC.emplace_back(3, 6, 3);
ABC.emplace_back(3, 6, 3);//直接生成元素,调用构造函数
for (int i = 0; i < ABC.size(); i++) {//正常for循环
std::cout << ABC[i] << std::endl;
}
ABC.erase(ABC.begin() + 4);//erase方法删除一个元素
for (auto &AB: ABC) {//增强for循环
std::cout << AB << std::endl;
}
}
Comments NOTHING