a question about STL

J

JDT

Hi,

I am curious if there is a way to just use existing STL functions,
algorithms etc to accomplish the following loop (without a need to write
my own function). I know how to use some STL functions plus my own
function to replace the loop. But that unnecessarily makes code more
complicated. Any advice is much welcome. Thanks.

int nSize;
....
vector<int> v;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v = i;

JD
 
V

Victor Bazarov

JDT said:
I am curious if there is a way to just use existing STL functions,
algorithms etc to accomplish the following loop (without a need to
write my own function). I know how to use some STL functions plus my
own function to replace the loop. But that unnecessarily makes code
more complicated. Any advice is much welcome. Thanks.

int nSize;
...
vector<int> v;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v = i;


See 'generate'. Also search the archives for 'generate'. You will
probably need to use some Boost lambda construct to increment 'i'...
Something like that, anyway. In most cases your own function would
still be clearer than the statement you can whip up using standard
library means.

V
 
J

JDT

Victor said:
JDT said:
I am curious if there is a way to just use existing STL functions,
algorithms etc to accomplish the following loop (without a need to
write my own function). I know how to use some STL functions plus my
own function to replace the loop. But that unnecessarily makes code
more complicated. Any advice is much welcome. Thanks.

int nSize;
...
vector<int> v;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v = i;



See 'generate'. Also search the archives for 'generate'. You will
probably need to use some Boost lambda construct to increment 'i'...
Something like that, anyway. In most cases your own function would
still be clearer than the statement you can whip up using standard
library means.

V


Hi Victor,

Thanks for the reply. But generate uses a customized function as the
3rd parameter, which I avoid because the original code is neater. I am
looking for something such as less<> that does such simple things as
increasing. Thanks for any further help.

JD
 
J

James Kanze

I am curious if there is a way to just use existing STL functions,
algorithms etc to accomplish the following loop (without a need to write
my own function). I know how to use some STL functions plus my own
function to replace the loop. But that unnecessarily makes code more
complicated. Any advice is much welcome. Thanks.
int nSize;
...
vector<int> v;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v = i;


You need a special iterator; check out boost::iterators. With
the correct iterator, it's just:

vector<int> v( boost::counting_iterator< int >( 0 ),
boost::counting_iterator< int >( nSize ) ) ;
 
J

JDT

James said:
I am curious if there is a way to just use existing STL functions,
algorithms etc to accomplish the following loop (without a need to write
my own function). I know how to use some STL functions plus my own
function to replace the loop. But that unnecessarily makes code more
complicated. Any advice is much welcome. Thanks.

int nSize;
...
vector<int> v;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v = i;



You need a special iterator; check out boost::iterators. With
the correct iterator, it's just:

vector<int> v( boost::counting_iterator< int >( 0 ),
boost::counting_iterator< int >( nSize ) ) ;


--
James Kanze (Gabi Software) email: (e-mail address removed)
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Hi James,

Do you think MS Visual Studio 2005 supports boost? I copied an example
from the Internet but the compiling process failed. For example, the
compiler complained the following file is not found. Your further help
is appreciated.

#include "boost"

JD
 
M

Mark P

JDT said:
James said:
I am curious if there is a way to just use existing STL functions,
algorithms etc to accomplish the following loop (without a need to write
my own function). I know how to use some STL functions plus my own
function to replace the loop. But that unnecessarily makes code more
complicated. Any advice is much welcome. Thanks.

int nSize;
...
vector<int> v;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v = i;



You need a special iterator; check out boost::iterators. With
the correct iterator, it's just:

vector<int> v( boost::counting_iterator< int >( 0 ),
boost::counting_iterator< int >( nSize ) ) ;


--
James Kanze (Gabi Software) email: (e-mail address removed)
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Hi James,

Do you think MS Visual Studio 2005 supports boost? I copied an example
from the Internet but the compiling process failed. For example, the
compiler complained the following file is not found. Your further help
is appreciated.

#include "boost"

JD


Boost and MS VC++ are compatible but you need to install boost to make
it work. I've done it before and it's not trivial, however there are
good instructions online. Try searching the boost website for more details.
 
J

James Kanze

James said:
I am curious if there is a way to just use existing STL functions,
algorithms etc to accomplish the following loop (without a need to write
my own function). I know how to use some STL functions plus my own
function to replace the loop. But that unnecessarily makes code more
complicated. Any advice is much welcome. Thanks.
int nSize;
...
vector<int> v;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v = i;

You need a special iterator; check out boost::iterators. With
the correct iterator, it's just:
vector<int> v( boost::counting_iterator< int >( 0 ),
boost::counting_iterator< int >( nSize ) ) ;

Do you think MS Visual Studio 2005 supports boost?

Officially, or? It's not included as part of the product, as
far as I know. On the other hand, I'm pretty sure that Boost
supports recent (and even not so recent) VC++.
I copied an example
from the Internet but the compiling process failed. For example, the
compiler complained the following file is not found. Your further help
is appreciated.

Boost uses a somewhat exotic build process, and I'm not familar
with it. However:

-- A large number of the components (including, I suspect,
iterator) are 100% templates, and don't need to be compiled.
Just copy the necessary headers into a Boost directory, and
tell the compiler to look for them there.

-- Some of the components which do require compiling (e.g.
regular expressions, which you'll definitly want as well)
have support for compiling outside of the Boost build
process. You might also want to try that.

Whatever process you use, of course, you'll have to tell the
compiler where to look for the headers and the libraries. For
VC++, it's /I option for the headers, and you specify each
library explicitly, by name. (If you're using bash or ksh, you
can do something like "$BOOSTLIBDIR/*.lib", if you want them
all. Unlike most compilers, the order of libraries is not
significant for VC++.)
#include "boost"

I don't think that there is such a header. Something like:
#include "boost/iterator.hpp"
would be more likely, I think.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,012
Latest member
RoxanneDzm

Latest Threads

Top