C++ 检查元素是否为 std::vector

标签 c++ types vector

我想遍历一个 vector 并检查元素是 vector 还是字符串。我还需要一种方法将不同的 vector 传递给一个函数。 像这样:

using namespace std;
string toCustomString(<some vector> vec) {
    string ret = "";
    for(size_t i = 0; i < vec.length(); ++i) 
        if (vec[i] == %vector%)
            ret += toCustomString(vec[i]);
        else //if type of vec[i] is string
            ret += "foo"+vec[i]+"bar";
    }
    return ret;
}
  • 好吧,首先我需要知道如何正确检查 vec[i] 是否为 std::vector

  • 然后我需要知道如何定义函数的参数以接受任何类型的(多维) vector

最佳答案

std::vector只能包含一种类型 - 即 Tstd::vector<T> , 可以通过成员(member) value_type 访问.

您可能正在寻找的是模板特化:

template<typename T>
string toCustomString(std::vector<T> vec) {
    // general case
}

template<>
string toCustomString<std::string>(std::vector<std::string> vec) {
    // strings
}

(如果你想在所有 vector 上部分特化它,那么你需要将它提升为一个结构)

如果你真的想在 vector 中存储字符串和 vector ,那么看看 Boost.Variant 和 Boost.Any

关于C++ 检查元素是否为 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957506/

相关文章:

c++ - 使迭代器取消引用对象

haskell - 是什么让 Haskell 中的两个类型表达式等效?

c++ - 指向对象的指针 vector - 如何避免内存泄漏?

c++ - 输出二维 vector 的语法

时间:2019-02-08 标签:c++calllinuxcommandsforkschilds

c++ - 为什么与 printf 未定义行为中的转换说明符不匹配的参数?

javascript - `unknown` 用法上的 TypeScript 3.0 错误

Excel vba 宏在 2007 年出现类型不匹配错误,但在 2010 年有效

c++ - 在这种情况下如何从 vector 中删除一个项目?

c++ - 对象指针数组的内存结构(可视化)