You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何用new初始化不同初始大小的vector数组

解决C++中用new初始化vector数组的问题

嘿,我来帮你搞定这个问题!你想通过new创建一个包含2个vector<test>的数组,让每个vector分别有10和20个初始元素,但代码跑不起来,甚至栈上的数组也报错,核心原因是你对C++的列表初始化和vector构造函数的优先级理解有点偏差,咱们一步步拆解:

为什么你的代码会失败?

你写的{{10},{20}}是列表初始化语法,但这里有两个坑:

  1. 构造函数优先级问题:C++11之后,列表初始化({})会优先匹配vector的initializer_list<T>构造函数,也就是说{10}会被编译器理解为「创建一个包含1个test元素的vector」,而不是「创建一个大小为10的vector」。
  2. 元素构造不匹配:你的test类注释掉了接受int的构造函数,所以编译器没法把10转换成test对象,自然就报错了。哪怕你打开那个构造函数,结果也不是你想要的——它会创建只有1个元素的vector,而不是10个元素。

正确的解决方案

方案一:显式调用vector的大小构造函数(不修改test类)

因为vector的explicit vector(size_type n)构造函数是用来创建包含n个默认构造元素的vector,但它是explicit的,不能通过列表初始化的单个int触发,所以我们需要显式用()来构造每个vector:

修改后的完整代码:

#include <iostream>
#include <vector>
using namespace std;

class test{
public :
    int member {0};
    void fun(){cout << "member is " << member << endl;}
    test(){} 
    // 保持这个构造函数注释也没问题
    //test(int param) : member(param){}
};

int main() {
    // 堆上的vector数组,显式构造每个vector指定大小
    vector<test> *vp = new vector<test>[2] { vector<test>(10), vector<test>(20) };
    
    // 验证一下大小是否符合预期
    cout << "vp[0]的大小:" << vp[0].size() << endl; // 输出10
    cout << "vp[1]的大小:" << vp[1].size() << endl; // 输出20
    
    // 栈上的数组也可以用同样的方式
    vector<test> array[2] { vector<test>(10), vector<test>(20) };
    cout << "array[0]的大小:" << array[0].size() << endl;
    cout << "array[1]的大小:" << array[1].size() << endl;
    
    // 别忘了释放堆上的数组内存
    delete[] vp;
    return 0;
}

方案二:用resize方法初始化大小(更直观)

如果你觉得上面的写法有点繁琐,也可以先创建空的vector数组,再调用resize方法指定大小,这样代码更易懂:

int main() {
    vector<test> *vp = new vector<test>[2];
    vp[0].resize(10); // 把第一个vector的大小设为10
    vp[1].resize(20); // 把第二个vector的大小设为20
    
    // 验证大小
    cout << "vp[0]的大小:" << vp[0].size() << endl;
    cout << "vp[1]的大小:" << vp[1].size() << endl;
    
    delete[] vp;
    return 0;
}

额外提醒

如果你以后想通过列表初始化给vector塞元素(而不是指定大小),那才需要打开test类的int构造函数,比如vector<test>{10, 20}会创建包含两个test元素的vector,分别用10和20初始化——这和指定大小是完全不同的操作,可别搞混啦!

内容的提问来源于stack exchange,提问作者Han XIAO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:47:58