rub*_*nvb 8 c++ lambda stl delete-operator c++11
我试图简单地删除我的vector/list/...函数中的每个指针,用超酷的lambda函数编写.
template <typename T>
void delete_clear(T const& cont)
{
for_each(T.begin(), T.end(), [](???){ ???->delete() } );
}
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么填补???的.任何帮助是极大的赞赏!
更新:它应该是这样的:
template <typename Container>
void delete_clear(Container &c)
{
for_each(c.begin(), c.end(), [](typename Container::value_type x){ delete x; } );
c.clear();
}
Run Code Online (Sandbox Code Playgroud)
这里有两个问题:lambda语法本身,以及如何获取容器的值类型:
要mydelete()在每个指针上调用该函数(假设您已定义了mydelete()成员函数):
for_each(c.begin(), c.end(), [](typename T::value_type x){ x->mydelete(); } );
Run Code Online (Sandbox Code Playgroud)
要使用delete运算符删除它们:
for_each(c.begin(), c.end(), [](typename T::value_type x){ delete x; } );
Run Code Online (Sandbox Code Playgroud)
此外,对于给定的问题,lambda不一定是C++ 11中最酷的新功能:
for(auto x : c) { delete x; }
Run Code Online (Sandbox Code Playgroud)
我注意到对容器进行const引用并删除其中的所有内容有点狡猾,尽管语言不会因为指针而阻止你.但是,你确定这是一个"持续"的操作,在容器的含义和使用范围内?
如果您正在编写此代码,那么您可能会受益于Boost指针容器或容器shared_ptr.
怎么样的:
template <typename Container>
void delete_all(const Container& c)
{
typedef typename Container::value_type Value;
std::for_each(c.begin(), c.end(), [](const Value& v){ delete v; });
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不会从容器中删除指针,因此在调用它之后,您需要非常小心对容器及其包含的指针所执行的操作.
| 归档时间: |
|
| 查看次数: |
4430 次 |
| 最近记录: |