469,097 Members | 1,603 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,097 developers. It's quick & easy.

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

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

Jul 23 '05 #1
5 10182
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
Jul 23 '05 #2

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

Jul 23 '05 #3
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
Jul 23 '05 #4
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


Jul 23 '05 #5
"Victor Bazarov" <v.********@comAcast.net> wrote in message
news:yY*******************@newsread1.mlpsca01.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

Jul 23 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Andreas Krueger | last post: by
3 posts views Thread by Erik Borgstr?m | last post: by
1 post views Thread by Ingo Nolden | last post: by
1 post views Thread by Alex Vinokur | last post: by
2 posts views Thread by danielhdez14142 | last post: by
reply views Thread by kglaser89 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.