如何创建元素为链表头指针的vector?求替代实现方案
几种创建初始化链表头指针vector的替代方式
嘿,我来给你梳理几种替代现有写法的实现方式,都是C++里常用且简洁的手段:
利用vector构造函数直接初始化
这是最简洁的方式,直接在创建vector时指定元素数量和初始值,省去循环的麻烦:int n=5; vector<list*> tab(n, nullptr); // 直接创建含n个nullptr元素的vector这里用
nullptr代替NULL是C++11及以后的推荐写法,类型更安全,避免一些隐式转换问题。之后你要给某个链表插入元素,直接调用insert_beg(tab[i], x)就可以了。使用emplace_back动态添加元素
如果你的vector大小不是固定的,需要动态扩容添加头指针,可以用emplace_back代替push_back,它会直接在vector内存中构造指针对象,效率更高:vector<list*> tab; for(int i=0; i<n; i++){ tab.emplace_back(nullptr); // 直接构造nullptr元素 }初始化列表直接赋值
当你的链表数量很少且固定时,可以用初始化列表直接写出所有初始值,直观又清晰:vector<list*> tab = {nullptr, nullptr, nullptr, nullptr, nullptr}; // 对应n=5的情况结合resize和fill批量初始化
如果你先创建了空vector,之后需要调整大小并统一初始化,可以用resize先分配空间,再用fill函数批量设置值:#include <algorithm> // 需要包含algorithm头文件 vector<list*> tab; tab.resize(n); // 把vector大小调整为n,默认会初始化指针为nullptr(不过显式fill更保险) fill(tab.begin(), tab.end(), nullptr); // 批量将所有元素设为nullptr
这些方式都能达到你想要的“每个vector元素作为链表头指针且初始化为NULL(推荐用nullptr)”的效果,你可以根据实际场景(比如是否固定大小、是否动态扩容)来选择最适合的写法。
内容的提问来源于stack exchange,提问作者Løt Fï
相关产品推荐
相关产品推荐

