vec.assign(10, 1); // 替换为10个1
pr_vector(vec);
// vector没有向头部插入数据的原生方法,只能通过insert()方法来操作,插入位置都为指针指向的前一个位置
// 具体有4种
// 第一种vec.insert(p, t); p为自身的迭代器,t为需要插入的值,返回值为指向新添加元素的迭代器
auto p = vec.insert(vec.begin() + vec.size()/2, 6688);
// 第二种vec.insert(p, n, t); p为自身的迭代器,插入n个t,返回值为指向新添加的第一个元素的迭代器,如果n为0,则返回p
vec.insert(p, 3, 4);
// 第三种vec.insert(p, b, e); p为自身的迭代器,b、e为同类型其他vec对象的迭代器,返回值为指向新添加的第一个元素的迭代器。范围为空,则返回p
vec.insert(p, vec2.crbegin(), vec2.crend()); // const 反向迭代器
// 第四种vec.insert(p, il); p为自身的迭代器,il为元素值列表,返回值为指向新添加的第一个元素的迭代器,列表为空,则返回p
vec.insert(vec.begin(), {9,8,7,6,5,4,3,2,1,0});
pr_vector(vec);
// 善用使用insert返回值,可以实现特定位置的反复插入,以上结果已说明
// emplace操作, 【c++11】emplace_front【vector没有】、emplace、emplace_back对应push_front【vector没有】、insert、push_back
std::vector per = {{"The_Third_Wave", 100, }}; // 类初始化+vector初始化,所以{{}, {}}必须的
per.emplace_back("The_Third_Wave", 188, );
per.emplace(per.begin() + 1, Person("The_Third_Wave", 168, ));
for (auto &p: per)
{
print(std::cout, p);
}
// 删除操作,注意编译器不检查元素是否存在,所以坑自己填
// vec.pop_back(),vector没有pop_front()
vec = {0, 1, 2, 3, 4, 5, 6, 7, 8 ,9};
vec.pop_back();
pr_vector(vec);
// vec.erase(p)【删除迭代器p所指元素,返回值为:被删元素之后的迭代器。p指向尾部,返回尾后迭代器,如果p是尾后迭代器,那就坑死你了,恭喜!】
vec.erase(vec.begin() + 8);
pr_vector(vec);
// vec.erase(b, e)【删除迭代器b,e所指范围元素,返回值为:被删元素之后的迭代器。如果e是尾后迭代器,返回的还是尾后迭代器,不坑,恭喜!】
vec.erase(vec.begin() + 3 , vec.end() - 1);
pr_vector(vec);
// vec.clear()删除所有,返回值为void
vec.clear();
pr_vector(vec);
std::cout << "上面有空行就对了!否则就是出错了。";
}
结果为:

[cpp] view plaincopy
0 1 2 3 4 5 6 7 8 9
0 9
0 9