Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# generating vectors on the fly

Posted on 2014-01-09
Medium Priority
202 Views
Hi

Is it possible to generate vectors on the fly? I just need generic vectors that I then add to another  vector. I find it quite useless to create a vector and push into it  like
std::vector<UINT64> temp;
temp.push_back(1);
temp.push_back(2);
temp.push_back(3);

just so that i can  then add it to the enclosing vector.
enclosing_vector.push_back(temp);
temp.empty();
//add to temp again and push into enclosing_vector

I want to do something like this:
enclosing_vector.push_back(std::vector<UINT64> {1,2,3});

Is something more elegant possible?
0
Question by:LuckyLucks
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 3
• 3

LVL 86

Expert Comment

ID: 39769184
You'd usually use 'vector::insert()' and an array for that, e.g.

``````UINT64 buf [] = {1,2,3};
size_t sz = sizeof(buf) / sizeof(UINT64);

enclosing_vector.insert(enclosing_vector.end(), buf, buf + sz);
``````

Is that what you had in mind?
0

Author Comment

ID: 39775597
no, actually that is not what i wanted. I wanted a more elegant approach to do on the fly insertions into vectors (inserting vectors into vectors), without creating vector definitions for such a temporary use.

what you offered was another way of what i was doing in the first place and both are many lines of codes for a very simple purpose. I need something cleaner and more elegant if possible.
0

LVL 86

Expert Comment

ID: 39775601
Well, acting another vector to a vector still follows the same scheme, i.e.

``````std::vector<UINT64> temp;
temp.push_back(1);
temp.push_back(2);
temp.push_back(3);
enclosing_vector.(enclosing_vector.end(), temp.begin(), temp.end());
``````

Sorry, but there does not seem to be a more elegant way (or I am completely missing the point).
0

LVL 86

Expert Comment

ID: 39808196

Can we cool down (or in your case heat up) to close that step by step?

And, as a HINT: Iteraction solves problems, not getting back half a weeek later. That is just plain frustrating.
0

LVL 32

Expert Comment

ID: 39809457
>> I want to do something like this: ... std::vector<UINT64> {1,2,3}
You can overload the () operator (or another operator of your choosing) to do the push backs. Here is one approach.
``````class genVec : public vector<uint64_t>
{
public:
genVec & operator () (uint64_t const & val)
{
this->push_back(val);
return *this;
}
};

int main() {
genVec gv;
gv(1)(2)(3);
``````
0

LVL 32

Expert Comment

ID: 39809476
I just noticed that you did not want to define explicit temporary vectors. gv is a temporary, but you don't have to use it:
``````   vector<genVec> enclosing_vector;
genVec gv;
gv(1)(2)(3);
enclosing_vector.push_back(gv);
enclosing_vector.push_back( genVec() );
enclosing_vector.push_back( genVec() (4)(5)(6)(7) );
``````
enclosing_vector now has a size of 3, and it's first element is a vector of size 3; 2nd element is a vector of size 0; 3rd vector is a vector of size 4.
0

LVL 32

Accepted Solution

phoffric earned 1500 total points
ID: 39809492
The parens are OK, but harder to type and not too stylish. You can change the () operator to, say, <<. I like this style better since it conveys the notion of pushing values to an object (like cout). Now you could write:
``````enclosing_vector.push_back( genVec() << 4 << 5 << 6 << 7 );
``````
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on thâ€¦
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more â€¦
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor anâ€¦
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
###### Suggested Courses
Course of the Month6 days, 20 hours left to enroll