470,631 Members | 1,640 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

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

a question about STL

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<intv;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v[i] = i;

JD
Apr 13 '07 #1
6 1414
JDT wrote:
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<intv;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v[i] = 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
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Apr 13 '07 #2
JDT
Victor Bazarov wrote:
JDT wrote:
>>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<intv;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v[i] = 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
Apr 13 '07 #3
On Apr 13, 10:13 pm, JDT <jdt_yo...@yahoo.comwrote:
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<intv;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v[i] = i;
You need a special iterator; check out boost::iterators. With
the correct iterator, it's just:

vector<intv( boost::counting_iterator< int >( 0 ),
boost::counting_iterator< int >( nSize ) ) ;
--
James Kanze (Gabi Software) email: ja*********@gmail.com
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

Apr 13 '07 #4
JDT
James Kanze wrote:
On Apr 13, 10:13 pm, JDT <jdt_yo...@yahoo.comwrote:

>>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<intv;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v[i] = i;


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

vector<intv( boost::counting_iterator< int >( 0 ),
boost::counting_iterator< int >( nSize ) ) ;
--
James Kanze (Gabi Software) email: ja*********@gmail.com
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
Apr 13 '07 #5
JDT wrote:
James Kanze wrote:
>On Apr 13, 10:13 pm, JDT <jdt_yo...@yahoo.comwrote:

>>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<intv;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v[i] = i;


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

vector<intv( boost::counting_iterator< int >( 0 ),
boost::counting_iterator< int >( nSize ) ) ;
--
James Kanze (Gabi Software) email: ja*********@gmail.com
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.
Apr 13 '07 #6
On Apr 14, 12:51 am, JDT <jdt_yo...@yahoo.comwrote:
James Kanze wrote:
On Apr 13, 10:13 pm, JDT <jdt_yo...@yahoo.comwrote:
>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<intv;
v.resize(nSize);
for (int i=0; i<nSize; i++)
v[i] = i;
You need a special iterator; check out boost::iterators. With
the correct iterator, it's just:
vector<intv( 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.

--
James Kanze (Gabi Software) email: ja*********@gmail.com
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

Apr 14 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by eScrewDotCom | last post: by
220 posts views Thread by Brandon J. Van Every | last post: by
8 posts views Thread by eScrewDotCom | last post: by
5 posts views Thread by eScrewDotCom | last post: by
reply views Thread by eScrewDotCom | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.