Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Initializing vector<vector<int> > and other vector questions...

Reply
Thread Tools

Initializing vector<vector<int> > and other vector questions...

 
 
pmatos
Guest
Posts: n/a
 
      05-04-2005
Hi all,

I have a vector of vector of ints, I could use C approach by using
int[][] but I think C++ vector<vector<int> > would be easier to manage.
So I have a function which creates and initializes the vector with the
values I need (I know these values before hand).

- What's the best way to initialize the vector<vector<int> >? Can I
initilize it by enumerating its values?
- If I do: v = new vector<vector<int> >(3) for example, is it
initializing the internal vector automatically?
- Is returning a vector from a function too heavy from an efficiency
perspective?
Or it would be better to return always a pointer to a vector?

Cheers,

Paulo Matos

 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      05-04-2005
pmatos wrote:
> I have a vector of vector of ints, I could use C approach by using
> int[][] but I think C++ vector<vector<int> > would be easier to manage.
> So I have a function which creates and initializes the vector with the
> values I need (I know these values before hand).
>
> - What's the best way to initialize the vector<vector<int> >? Can I
> initilize it by enumerating its values?


Not really. The simplest way would probably be initialising it from
an array of arrays. While you do have to create that array of arrays,
but later you don't need to manage it.

> - If I do: v = new vector<vector<int> >(3) for example, is it
> initializing the internal vector automatically?


Yes, it creates a vector of three empty vectors of int (provided that
your 'v' variable is a pointer). You could add another argument to
the initialiser and control how the "internal" vectors are initialised:

v = new vector<vector<int> >(3, vector<int>(5, 42));

That way it's a vector of 3 vectors of 5 int each, and ints are all
set to have the value 42.

> - Is returning a vector from a function too heavy from an efficiency
> perspective?


Not really. Your compiler probably has some kind of "return value
optimization" implemented.

> Or it would be better to return always a pointer to a vector?


Depends on your needs.

V
 
Reply With Quote
 
 
 
 
pmatos
Guest
Posts: n/a
 
      05-04-2005

Victor Bazarov wrote:
> pmatos wrote:
> > I have a vector of vector of ints, I could use C approach by using
> > int[][] but I think C++ vector<vector<int> > would be easier to

manage.
> > So I have a function which creates and initializes the vector with

the
> > values I need (I know these values before hand).
> >
> > - What's the best way to initialize the vector<vector<int> >? Can I
> > initilize it by enumerating its values?

>
> Not really. The simplest way would probably be initialising it from
> an array of arrays. While you do have to create that array of

arrays,
> but later you don't need to manage it.



Thanks for you previous answers...
This issue is insteresting. Do you mean that if I create a int[][],
then I can use it to initialize the vector<vector<int> >? If I have a =
int[][] well initialized of course can I do v = vector<vector<int> >(a)
? (Being both v and a pointers of course.)

Paulo Matos

 
Reply With Quote
 
Victor Bazarov
Guest
Posts: n/a
 
      05-04-2005
pmatos wrote:
> ...
> This issue is insteresting. Do you mean that if I create a int[][],
> then I can use it to initialize the vector<vector<int> >? If I have a =
> int[][] well initialized of course can I do v = vector<vector<int> >(a)
> ? (Being both v and a pointers of course.)


No. Unfortunately, it doesn't work like that. You would still need
to do some dancing around.

After some thinking, I now conclude that I should take it back, there
is no easy way to initialise a vector of vectors from a two-dimensional
array. A vector can be initialised from an array by

vector<int> vi(array_of_int,
array_of_int + sizeof(array_of_int)/sizeof(int) );

but for a vector of vectors you'd have to write that initialiser for
each vector separately, which makes it not worth your while, probably.

V
 
Reply With Quote
 
pmatos
Guest
Posts: n/a
 
      05-04-2005

> No. Unfortunately, it doesn't work like that. You would still need
> to do some dancing around.
>
> After some thinking, I now conclude that I should take it back, there
> is no easy way to initialise a vector of vectors from a

two-dimensional
> array. A vector can be initialised from an array by
>
> vector<int> vi(array_of_int,
> array_of_int + sizeof(array_of_int)/sizeof(int)

);
>
> but for a vector of vectors you'd have to write that initialiser for
> each vector separately, which makes it not worth your while,

probably.
>


Well, yeah, It seems I'll have to give it some thinking then. Thanks a
lot for the help.

Paulo Matos

> V


 
Reply With Quote
 
John Carson
Guest
Posts: n/a
 
      05-05-2005
"Victor Bazarov" <(E-Mail Removed)> wrote in message
news:yY8ee.67894$(E-Mail Removed)01.us.t o.verio.net
> pmatos wrote:
>
>> - If I do: v = new vector<vector<int> >(3) for example, is it
>> initializing the internal vector automatically?

>
> Yes, it creates a vector of three empty vectors of int (provided that
> your 'v' variable is a pointer). You could add another argument to
> the initialiser and control how the "internal" vectors are
> initialised:
> v = new vector<vector<int> >(3, vector<int>(5, 42));
>
> That way it's a vector of 3 vectors of 5 int each, and ints are all
> set to have the value 42.


Isn't one of the main reasons for using vector that it does memory
management for you? Is it not therefore almost always a bad idea to be
creating vectors using new?

--
John Carson

 
Reply With Quote
 
reut reut is offline
Junior Member
Join Date: Apr 2007
Posts: 1
 
      04-26-2007
how can I use push_back in vector< vector<int> >
?
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
using vector or other classes to store vector coordinates ssylee C++ 1 01-13-2009 09:56 PM
const vector<A> vs vector<const A> vs const vector<const A> Javier C++ 2 09-04-2007 08:46 PM
Initializing a vector of a vector in a constructor fatgirl.brown@gmail.com C++ 4 11-12-2006 09:22 AM
Free memory allocate by a STL vector, vector of vector, map of vector Allerdyce.John@gmail.com C++ 8 02-18-2006 12:48 AM
how the vector is created, how to pass vector to webservices method apachesoap:Vector Rushikesh Joshi Perl Misc 0 07-10-2004 01:04 PM



Advertisments