Date: Fri, 27 Dec 2024 16:05:37 -0800
Resize erases the number of “excess” elements, but where does it say that
it affects the capacity?
[vector.capacity]. Erase doesn’t seem to talk about reducing the capacity
either [vector.modifiers].
On Fri, Dec 27, 2024 at 2:51 PM Chris Ryan <chrisr98008_at_[hidden]> wrote:
> Hi Andre,
> .resize(0) actually deletes the storage. Farrakh is wanting it to
> preserve the storage (keep the .capacity(), not have to alloc it again)
>
> Farrakh,
> I think that you might not realize the reason .clear() is slower is
> because it has to call the in-place destructor for each element (zero
> through size(), but not all the way up to .capacity()) You can't just
> change the count or you screw up the object lifetime of those objects
> that were not destructed. D'tors won't get called. Index positions may
> potentially get overwritten later with subsequent push_backs(...) and the
> in-place c'tors calls. (thus causing leaks)
>
> https://en.cppreference.com/w/cpp/container/vector/clear
>
>
> On Fri, Dec 27, 2024 at 2:08 PM Andre Kostur via Std-Proposals <
> std-proposals_at_[hidden]> wrote:
>
>> What’s wrong with .resize(0) ?
>>
>> On Fri, Dec 27, 2024 at 1:57 PM Фаррах Фаттахов via Std-Proposals <
>> std-proposals_at_[hidden]> wrote:
>>
>>> After working with SFML, I so hated std::vector (I was a bad programmer
>>> back then and didn't know about the reserve() function, which led to not
>>> understanding why std::vector is so slow, while a simple array performs
>>> much better). As a result, in my new project i created my own version of
>>> std::vector - FE2D::dynamic_array. And there, from the beginning i created
>>> one useful function - reset()
>>> ```C++
>>>
>>> // Reset the Size of Dynamic Array to Zero, but it's don't Touches the Real Occupied Memory of Dynamic Array
>>> void reset() { mSize = 0; }
>>> ```
>>>
>>> Instead of clear() it's just setting mSize to zero. It's very useful in
>>> the situations like
>>>
>>> ```C++
>>> void Render() { // It's called every frame
>>> // Add a sprites to the FE2D::dynamic_array to draw it later
>>> m_Renderer.AddSprite(m_Sprite_0);
>>> m_Renderer.AddSprite(m_Sprite_1);
>>> m_Renderer.AddSprite(m_Sprite_2);
>>> ...
>>> // Draw the Sprites and reset the dynamic arrays to prepare it for the next frame
>>> m_Renderer.RenderSprites();
>>> }
>>> ```
>>> Here reset() works like clear(), but much faster
>>>
>>> In the std::vector or std::deque is no functions like reset() and i want
>>> to add it there, especially sometimes i get errors because my
>>> FE2D::dynamic_array is not so good like std::vector and i have to use it
>>> instead of mine, but there is no function i need. I think reset() will be
>>> nice thing for std::vector.
>>> --
>>> Std-Proposals mailing list
>>> Std-Proposals_at_[hidden]
>>> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>>>
>> --
>> Std-Proposals mailing list
>> Std-Proposals_at_[hidden]
>> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>>
>
it affects the capacity?
[vector.capacity]. Erase doesn’t seem to talk about reducing the capacity
either [vector.modifiers].
On Fri, Dec 27, 2024 at 2:51 PM Chris Ryan <chrisr98008_at_[hidden]> wrote:
> Hi Andre,
> .resize(0) actually deletes the storage. Farrakh is wanting it to
> preserve the storage (keep the .capacity(), not have to alloc it again)
>
> Farrakh,
> I think that you might not realize the reason .clear() is slower is
> because it has to call the in-place destructor for each element (zero
> through size(), but not all the way up to .capacity()) You can't just
> change the count or you screw up the object lifetime of those objects
> that were not destructed. D'tors won't get called. Index positions may
> potentially get overwritten later with subsequent push_backs(...) and the
> in-place c'tors calls. (thus causing leaks)
>
> https://en.cppreference.com/w/cpp/container/vector/clear
>
>
> On Fri, Dec 27, 2024 at 2:08 PM Andre Kostur via Std-Proposals <
> std-proposals_at_[hidden]> wrote:
>
>> What’s wrong with .resize(0) ?
>>
>> On Fri, Dec 27, 2024 at 1:57 PM Фаррах Фаттахов via Std-Proposals <
>> std-proposals_at_[hidden]> wrote:
>>
>>> After working with SFML, I so hated std::vector (I was a bad programmer
>>> back then and didn't know about the reserve() function, which led to not
>>> understanding why std::vector is so slow, while a simple array performs
>>> much better). As a result, in my new project i created my own version of
>>> std::vector - FE2D::dynamic_array. And there, from the beginning i created
>>> one useful function - reset()
>>> ```C++
>>>
>>> // Reset the Size of Dynamic Array to Zero, but it's don't Touches the Real Occupied Memory of Dynamic Array
>>> void reset() { mSize = 0; }
>>> ```
>>>
>>> Instead of clear() it's just setting mSize to zero. It's very useful in
>>> the situations like
>>>
>>> ```C++
>>> void Render() { // It's called every frame
>>> // Add a sprites to the FE2D::dynamic_array to draw it later
>>> m_Renderer.AddSprite(m_Sprite_0);
>>> m_Renderer.AddSprite(m_Sprite_1);
>>> m_Renderer.AddSprite(m_Sprite_2);
>>> ...
>>> // Draw the Sprites and reset the dynamic arrays to prepare it for the next frame
>>> m_Renderer.RenderSprites();
>>> }
>>> ```
>>> Here reset() works like clear(), but much faster
>>>
>>> In the std::vector or std::deque is no functions like reset() and i want
>>> to add it there, especially sometimes i get errors because my
>>> FE2D::dynamic_array is not so good like std::vector and i have to use it
>>> instead of mine, but there is no function i need. I think reset() will be
>>> nice thing for std::vector.
>>> --
>>> Std-Proposals mailing list
>>> Std-Proposals_at_[hidden]
>>> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>>>
>> --
>> Std-Proposals mailing list
>> Std-Proposals_at_[hidden]
>> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>>
>
Received on 2024-12-28 00:05:50