c++ - std::vector 在不知道元素类型的情况下插入

标签 c++ c++11 vector

假设我有一个接受各种 vector 的模板化函数(但出于各种原因我不能在模板参数中提及它)。这是我正在尝试做的事情:在不知道其类型的情况下,在特定位置插入一个新的默认构造元素:

template <typename T>
void foo(T* v) {
  v->insert(v->begin() + 5, decltype(v->at(0))());
}

这行不通,但可以让您了解我正在尝试做什么。我还尝试使用 std::vector 中的 value_type 但我也遇到了问题。有什么想法可以解决这个问题吗?

最佳答案

回避整个“命名类型”业务:

v->emplace(v->begin() + 5);

v->insert(v->begin() + 5, {});

您当前的版本不起作用,因为 decltype(v->at(0)) 是引用类型。 value_type 如果您正确使用它应该可以工作,但如果没有看到您在做什么,我不能说它有什么问题。

关于c++ - std::vector 在不知道元素类型的情况下插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44189845/

相关文章:

c++ - gluLookAt 中的不连续性

c++ - 类模板的成员模板的成员模板的显式模板函数特化是否有效?

c++ - C++11 是否优化了 lambda 中的尾递归调用?

string - 如何连接Rust Vector的两个 `&str`类型元素并将其添加到零索引

c++ - 将回调与类成员函数一起使用时出现问题

c++ - 关于 C++ 套接字,为什么服务器总是返回相同的结果?

c++ - 创建对象时什么是空模板参数<>?

c++ - 使用 Sol2 将 LUA 序列安全地传递给 C++

c++ - 如何用 ffi 包装自定义结构的 std::vector?

c++ - 无法找到并替换 vector 的所有出现