首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用于在C++ std :: <vector>容器中存储多种类型的结构的模式

在C++中,std::vector是一个动态数组,用于存储相同类型的元素。如果要在std::vector中存储多种类型的数据,可以使用std::variantstd::any

  1. 使用std::variant

std::variant是C++17引入的一种类型安全的联合类型,它可以存储多种类型的数据,但是需要在编译时确定可能的类型。

代码语言:cpp
复制
#include<iostream>
#include<vector>
#include<variant>

int main() {
    std::vector<std::variant<int, double, std::string>> vec;
    vec.push_back(42);
    vec.push_back(3.14);
    vec.push_back("hello");

    for (const auto& item : vec) {
        std::visit([](const auto& value) {
            using T = std::decay_t<decltype(value)>;
            if constexpr (std::is_same_v<T, int>) {
                std::cout << "int: "<< value<< std::endl;
            } else if constexpr (std::is_same_v<T, double>) {
                std::cout << "double: "<< value<< std::endl;
            } else if constexpr (std::is_same_v<T, std::string>) {
                std::cout << "string: "<< value<< std::endl;
            }
        }, item);
    }

    return 0;
}
  1. 使用std::any

std::any是C++17引入的一种类型安全的容器,可以存储任何类型的数据。

代码语言:cpp
复制
#include<iostream>
#include<vector>
#include <any>

int main() {
    std::vector<std::any> vec;
    vec.push_back(42);
    vec.push_back(3.14);
    vec.push_back("hello");

    for (const auto& item : vec) {
        if (item.type() == typeid(int)) {
            std::cout << "int: "<< std::any_cast<int>(item)<< std::endl;
        } else if (item.type() == typeid(double)) {
            std::cout << "double: "<< std::any_cast<double>(item)<< std::endl;
        } else if (item.type() == typeid(std::string)) {
            std::cout << "string: "<< std::any_cast<std::string>(item)<< std::endl;
        }
    }

    return 0;
}

这两种方法都可以实现在std::vector中存储多种类型的数据,但是std::variant更加类型安全,而std::any更加灵活。在选择使用哪种方法时,需要根据具体的需求和场景来决定。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券