Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #44911
| Date | 2016-09-06 21:32 +0300 |
|---|---|
| From | Paavo Helde <myfirstname@osa.pri.ee> |
| Newsgroups | comp.lang.c++ |
| Subject | Re: best way to remove std::vector member |
| References | <nqkf55$fu4$1@dont-email.me> <nqm1h4$asn$1@gioia.aioe.org> <nqmug6$9dg$1@dont-email.me> |
| Message-ID | <FOSdnX6ImdcullLKnZ2dnUU78T3NnZ2d@giganews.com> (permalink) |
On 6.09.2016 20:30, Lynn McGuire wrote:
> On 9/6/2016 4:16 AM, Luca Risolia wrote:
>> On 05/09/2016 20:56, Lynn McGuire wrote:
>>> What is the best way to loop and remove a member of a std::vector
>>> instance variable ? The current code is:
>>
>> As an alternative approach from using std::vector::erase() every time,
>> consider a way to mark one or more elements in the vector as
>> "unused" instead.
>
> I thought about just marking the pointers as nullptr in the vector. But
> then I could not use owners.push_back (newOwner) and would have to
> search for any nullptr elements first.
>
> I am thinking about reversing the search. That is my normal method and
> don't know why I did not do it this time. Much safer than modifying the
> index variable directly.
>
> std::vector <DataGroup *> owners; is an class instance variable.
>
> int DataItem::removeOwner (DataGroup * ownerDG)
> {
> int num = owners.size ();
>
> for (int i = num - 1; i >= 0; i--)
> {
> if (owners [i] == ownerDG)
> {
> owners.erase (owners.begin () + i);
> }
> }
> }
This is still algorithmically worse (O(N*M)) than std::remove +
std::vector::erase (O(N)) - where M is the typical multiplicity of values.
Cheers
Paavo
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
best way to remove std::vector member Lynn McGuire <lynnmcguire5@gmail.com> - 2016-09-05 13:56 -0500
Re: best way to remove std::vector member Paavo Helde <myfirstname@osa.pri.ee> - 2016-09-05 22:43 +0300
Re: best way to remove std::vector member Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-09-05 21:11 +0100
Re: best way to remove std::vector member Vir Campestris <vir.campestris@invalid.invalid> - 2016-09-05 21:28 +0100
Re: best way to remove std::vector member Marcel Mueller <news.5.maazl@spamgourmet.org> - 2016-09-05 23:17 +0200
Re: best way to remove std::vector member Vir Campestris <vir.campestris@invalid.invalid> - 2016-09-07 20:55 +0100
Re: best way to remove std::vector member Juha Nieminen <nospam@thanks.invalid> - 2016-09-06 06:14 +0000
Re: best way to remove std::vector member Luca Risolia <luca.risolia@linux-projects.org> - 2016-09-06 11:16 +0200
Re: best way to remove std::vector member Öö Tiib <ootiib@hot.ee> - 2016-09-06 07:16 -0700
Re: best way to remove std::vector member Luca Risolia <luca.risolia@linux-projects.org> - 2016-09-23 14:38 +0200
Re: best way to remove std::vector member Lynn McGuire <lynnmcguire5@gmail.com> - 2016-09-06 12:30 -0500
Re: best way to remove std::vector member Paavo Helde <myfirstname@osa.pri.ee> - 2016-09-06 21:32 +0300
Re: best way to remove std::vector member mark <mark@invalid.invalid> - 2016-09-08 15:58 +0200
Re: best way to remove std::vector member Lynn McGuire <lynnmcguire5@gmail.com> - 2016-09-08 12:45 -0500
Re: best way to remove std::vector member mark <mark@invalid.invalid> - 2016-09-08 21:59 +0200
Re: best way to remove std::vector member Lynn McGuire <lynnmcguire5@gmail.com> - 2016-09-08 15:25 -0500
Re: best way to remove std::vector member Victor Bazarov <v.bazarov@comcast.invalid> - 2016-09-09 08:09 -0400
Re: best way to remove std::vector member mark <mark@invalid.invalid> - 2016-09-09 17:06 +0200
Re: best way to remove std::vector member Victor Bazarov <v.bazarov@comcast.invalid> - 2016-09-09 11:22 -0400
Re: best way to remove std::vector member mark <mark@invalid.invalid> - 2016-09-09 20:33 +0200
Re: best way to remove std::vector member Victor Bazarov <v.bazarov@comcast.invalid> - 2016-09-09 16:07 -0400
Re: best way to remove std::vector member Kan <fcantoro@nospam.it> - 2016-09-12 18:26 +0200
csiph-web