1. 问题背景
代码中希望实现的一段逻辑,简要描述如下:
函数入参:两个vector a和b
操作内容:当两个向量元素个数不相等,将a的元素个数改为与b相同,且赋值为0。
初步实现如下:
void Test(std::vector<uint32_t>& a, std::vector<uint32_t>& b)
{
if (a.size() != b.size()) {
a.resize(b.size(), 0);
}
}
测试发现,执行结果与预期不一致。
2. 问题原因
查看文档发现,std::vector.resize()有如下定义:
当使用resize操作时,分两种情况:
(1)当操作后size减小,则直接减小vector空间大小,舍弃多出来的元素;
(2)当操作后size增大,则以val对新增元素幅值,未指定val则赋默认值0。
参考文档连接:http://www.cplusplus.com/reference/vector/vector/resize/
3. 示例
Case1:
std::vector<uint32_t> a = {0, 1, 2};
a.resize(2);
输出结果为:a = {0, 1};
Case2:
std::vector<uint32_t> a = {0, 1, 2};
a.resize(4);
输出结果为:a = {0, 1, 2, 0};
Case3:
std::vector<uint32_t> a = {0, 1, 2};
a.resize(4, 5);
输出结果为:a = {0, 1, 2, 5};