簡體   English   中英

接收std :: vector作為參數的C ++模板函數

[英]C++ template function that receives std::vector as argument

我需要創建一個模板函數,作為參數接收某種類型的std :: container - 讓我們說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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM