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
std::co_proposers :: Jérôme Saint-Martin and friend Beg Copilot