接受std::vector作为参数的c++模板函数
C++ template function that receives std::vector as argument
我需要创建一个模板函数,它接收某种类型的std::容器作为参数——比如std::vector,并从该容器中删除所有元素。我需要一个等价的函数:
for_each(some_vector.begin(), some_vector.end(), [](some_vector_type* element){delete element;});
调用应该像这样:
delete_all_elements(some_vector);
这可能吗?
编辑:我想在delete_all_elements为什么不呢?
template <typename C>
void delete_all_elements(C& container) {
std::for_each(
container.begin(), container.end(),
[](typename C::value_type ptr) { delete ptr; }
);
container.clear();
}
您可以在开头添加例如static_assert(std::is_pointer<typename C::value_type>::value, "Elements must be pointers");
,以确保您不会试图删除非指针。
为什么不像几乎所有STL算法那样做呢?
template<typename Iterator>
void delete_all_elements(Iterator begin, Iterator end) {
while (begin != end) {
delete *begin;
++begin;
}
}
规范的方式是:
template <typename I>
void delete_all_elements(I begin, I end)
{
for (; begin != end; ++begin) delete *begin;
}
您正在寻找这个(c++ 03解决方案):
template<typename Container>
void delete_all(const Container & c)
{
typename Container::const_iterator begin = c.begin(), end = c.end();
while ( begin != end ) { delete *begin; ++begin; }
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗