能否将stack作为vector的存储元素,支持runtime动态生成stack?
问题解答:Vector存储Stack作为元素的可行性
明确结论:完全可以,没有标准库或语言层面的限制。
- 类型合规性说明:C标准对vector的元素类型要求仅为:该类型可正常构造、可在内存中安全移动(C11及以后已不再强制要求元素必须可拷贝)。std::stack作为标准库提供的容器适配器,本身完全满足上述要求,没有任何作为vector元素的障碍。
- 实际代码写法:你只需要在定义vector时,将模板参数替换为对应泛型的stack即可,示例声明:
std::vector<std::stack<double>> vector1;
此时调用vector1.at(2),返回值就是对应位置的stack实例的引用,和vector存储int、自定义类这类类型的使用逻辑完全一致。 - 动态扩容适配:你期望的运行时动态新增stack、由vector自动完成扩容迁移的需求,和vector的固有工作机制完全匹配。当vector内部存储的元素数量超过当前分配的容量时,会按实现默认的倍增规则申请新的连续内存,自动把已有的所有stack实例迁移到新内存中,再根据你动态追加元素的操作构造新的stack实例——全程不需要你在程序启动前提前预估需要的stack总数,所有对象构造、内存迁移的流程都会由vector在运行时自动处理。
实操注意点:同一个vector实例中存储的stack必须是同一模板实例化的统一类型,不能混杂配置了不同底层容器的stack实例(比如一会存底层是deque的stack、一会存底层是vector的stack),否则会因为类型不匹配无法通过编译。
内容的提问来源于stack exchange,提问作者Falco9898
相关产品推荐
相关产品推荐

