C++中如何初始化指定大小vector的前若干个元素
C++ vector实现指定总大小+前序元素部分初始化的方法
vector 不存在和原生数组完全一致的、单语句完成「指定总大小+短初始化列表初始化前N个元素、剩余元素自动补0」的原生语法,你写的vector<int> vec(10) {1,2,3};不符合C++语法规则,无法通过编译。
本质原因是原生数组属于聚合类型,遵循聚合初始化规则:当初始化列表长度小于数组大小时,剩余元素自动执行零初始化;而vector是标准库实现的容器类,不适用这套初始化逻辑。
要实现和示例数组完全等价的初始化效果(总大小10,前3个元素为1、2、3,剩余7个为0),可以用以下几种成熟方案:
- 方案1:先传入初始化列表构造前序元素,再resize到目标大小
resize扩容时新增的int类型元素会被值初始化为0,完全符合需求,C++11及以上版本支持,写法最简洁:#include <vector> using namespace std; int main() { vector<int> vec{1,2,3}; // 初始大小为3,元素依次为1、2、3 vec.resize(10); // 扩容到10个元素,新增的7个元素值为0 return 0; } - 方案2:先构造指定大小的全0 vector,再手动覆盖前序元素
这个写法兼容性最好,所有C++标准版本都能正常使用,逻辑直白:#include <vector> using namespace std; int main() { vector<int> vec(10); // 构造10个int元素,默认全部值初始化为0 // 手动给前3个元素赋值 vec[0] = 1; vec[1] = 2; vec[2] = 3; return 0; } - 方案3:先构造全量默认值vector,通过copy批量写入前序元素
如果需要显式初始化的前序元素数量较多,手动逐个写下标赋值比较繁琐,可以用这个方法:#include <vector> #include <algorithm> using namespace std; int main() { vector<int> vec(10); // 构造10个元素,默认全为0 int init_arr[] = {1,2,3}; // 把初始化数组的内容拷贝到vector开头位置 copy(begin(init_arr), end(init_arr), vec.begin()); return 0; }
以上三种方法最终得到的vector效果完全一致:总长度为10,索引0-2的元素值为1、2、3,索引3-9的元素值为0,和原生数组部分初始化的效果完全相同。
内容的提问来源于stack exchange,提问作者stormbreaker
相关产品推荐
相关产品推荐

