Date: Tue, 7 Oct 2025 22:35:24 +0200
Isn't cppreference
<https://en.cppreference.com/w/cpp/container/vector/clear.html>quite clear
about what clear() does?
*Erases all elements from the container. After this call, size()
<https://en.cppreference.com/w/cpp/container/vector/size.html> returns
zero.*
*Invalidates any references, pointers, and iterators referring to contained
elements. Any past-the-end iterators are also invalidated.*
it never specifies anything about releasing memory, or resetting values.
Best,
Rhidian
Op di 7 okt 2025 om 22:12 schreef Jerome Saint-Martin via Std-Proposals <
std-proposals_at_[hidden]>:
> *Motivation*
> In the Standard Template Library (STL), the clear() function is defined
> for containers like std::vector, std::deque, and others. Its behavior is
> functionally equivalent to:
> container.erase(container.begin(), container.end());
>
> It removes all elements from the container, reducing its size() to zero,
> but *does not release memory* (capacity remains unchanged), nor does it
> reset values. This leads to a subtle redundancy in the API: clear() is
> essentially a shorthand for a full-range erase().
>
> *Observation*
> While clear() is widely used and syntactically convenient, it introduces
> a semantic ambiguity. Many developers — especially those new to C++ —
> assume clear() “resets” the container’s values. In reality, it *destroys* the
> elements, not reinitializes them.
> This confusion is compounded by the fact that clear() does not offer
> anything beyond what erase(begin(), end()) already provides.
>
> *Too Much Progress Kills the Progress*
>
> *In the early days of programming, we used erase(begin(), end()) like our
> ancestors used silex to make fire. It was precise, intentional, and part of
> the craft. Then came clear() — a smoother, more modern tool. But in
> simplifying, we may have blurred its purpose. Today, we have expressive
> tools like resize(n, val), ranges, and lambdas.*
>
> *Proposal*
>
> - *Option A (radical)*:
> - Deprecate or remove clear() from STL containers where it is strictly
> equivalent to erase(begin(), end())
> - reclaim clear() for a more meaningful role — resetting vector
> values to a default value, like resize(n, val) does — and let erase(begin(),
> end()) remain the sharp silex in our toolbox.
> - *Option B (soft)*: Clarify in the standard documentation that
> clear() is a semantic alias for erase(begin(), end()), and does *not* reset
> values or release memory.
>
>
> std::co_proposers :: Jérôme Saint-Martin and friend Beg Copilot
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
<https://en.cppreference.com/w/cpp/container/vector/clear.html>quite clear
about what clear() does?
*Erases all elements from the container. After this call, size()
<https://en.cppreference.com/w/cpp/container/vector/size.html> returns
zero.*
*Invalidates any references, pointers, and iterators referring to contained
elements. Any past-the-end iterators are also invalidated.*
it never specifies anything about releasing memory, or resetting values.
Best,
Rhidian
Op di 7 okt 2025 om 22:12 schreef Jerome Saint-Martin via Std-Proposals <
std-proposals_at_[hidden]>:
> *Motivation*
> In the Standard Template Library (STL), the clear() function is defined
> for containers like std::vector, std::deque, and others. Its behavior is
> functionally equivalent to:
> container.erase(container.begin(), container.end());
>
> It removes all elements from the container, reducing its size() to zero,
> but *does not release memory* (capacity remains unchanged), nor does it
> reset values. This leads to a subtle redundancy in the API: clear() is
> essentially a shorthand for a full-range erase().
>
> *Observation*
> While clear() is widely used and syntactically convenient, it introduces
> a semantic ambiguity. Many developers — especially those new to C++ —
> assume clear() “resets” the container’s values. In reality, it *destroys* the
> elements, not reinitializes them.
> This confusion is compounded by the fact that clear() does not offer
> anything beyond what erase(begin(), end()) already provides.
>
> *Too Much Progress Kills the Progress*
>
> *In the early days of programming, we used erase(begin(), end()) like our
> ancestors used silex to make fire. It was precise, intentional, and part of
> the craft. Then came clear() — a smoother, more modern tool. But in
> simplifying, we may have blurred its purpose. Today, we have expressive
> tools like resize(n, val), ranges, and lambdas.*
>
> *Proposal*
>
> - *Option A (radical)*:
> - Deprecate or remove clear() from STL containers where it is strictly
> equivalent to erase(begin(), end())
> - reclaim clear() for a more meaningful role — resetting vector
> values to a default value, like resize(n, val) does — and let erase(begin(),
> end()) remain the sharp silex in our toolbox.
> - *Option B (soft)*: Clarify in the standard documentation that
> clear() is a semantic alias for erase(begin(), end()), and does *not* reset
> values or release memory.
>
>
> std::co_proposers :: Jérôme Saint-Martin and friend Beg Copilot
>
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>
-- Rhidian De Wit Software Engineer - Barco
Received on 2025-10-07 20:35:42
