vector 就是一个动态数组,类比 Java 中的 ArrayList,有如下操作方式:
函数 | 说明 |
---|---|
push_back | 在尾部添加元素(发现空间不足时自动将空间以 2 的指数增长,0、1、2、4、8、16…,扩容时需要深拷贝所有 item 到新的空间中) |
emplace_back | 在尾部添加元素(不需要调用拷贝构造,只构造一次) |
capacity | 获取数组最大容量 |
front | 获取头部元素 |
back | 获取尾部元素 |
vector[index] | 随机访问索引为 index 的元素 |
pop_back | 移除尾部元素 |
begin | 获取迭代器 |
erase | 删除指定位置的元素 |
insert | 在指定位置插入元素 |
构造函数
std::vector<Student> studentVector;
//构造函数直接初始化
std::vector<Student> studentVector2 = {Student("A"), Student("B"), Student("C")};
push_back、emplace_back
std::vector<Student> studentVector;
//右值传递:需要调用一次移动拷贝
studentVector.push_back(Student("A"));
//左值传递:需要调用一次深拷贝
Student b = Student("B");
studentVector.push_back(b);
//不需要调用移动拷贝、拷贝构造,只会构造一次
studentVector.emplace_back("C");
capacity
std::vector<Student> studentVector;
//获取最大容量
int size = studentVector.capacity();
front、back、vector[index]
std::vector<Student> studentVector;
//获取头部元素
Student frontStudent = studentVector.front();
//获取尾部元素
Student backStudent = studentVector.back();
//随机访问指定索引的元素
Student indexStudent = studentVector[0];
遍历
std::vector<Student> studentVector;
//正向遍历 studentVector.begin()
std::vector<Student>::iterator it;
for (it = studentVector.begin(); it != studentVector.end(); it++) {
// (*it) 表示当前 Student
LOGD("student name = %s", (*it)._name.c_str());
}
//反向遍历 studentVector.rbegin()
std::vector<Student>::reverse_iterator rv_it;
for (rv_it = studentVector.rbegin(); rv_it != studentVector.rend(); rv_it++) {
LOGD("student name = %s", (*rv_it)._name.c_str());
}
erase
std::vector<Student> studentVector;
std::vector<Student>::iterator it;
for (it = studentVector.begin(); it != studentVector.end();) {
//移除指定位置元素,符合条件时删除元素不需要 it++
if ((*it)._name == "D") {
studentVector.erase(it);
} else {
it++;
}
}
insert
std::vector<Student> studentVector;
std::vector<Student>::iterator insertIt = studentVector.begin();
//在索引为3的位置插入元素(从0开始)
insertIt += 3;
studentVector.insert(insertIt, Student("D"));