【C++标准头文件】<vector>

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"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值