Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > "Tileing" a Container

Reply
Thread Tools

"Tileing" a Container

 
 
woessner@gmail.com
Guest
Posts: n/a
 
      06-30-2006
I've been flipping through the Josuttis book trying to find it there's
a better way to accomplish this. Haven't come across anything so I
thought I'd turn to the group.

Suppose I have 2 containers, a large one and a small one. I would like
to replace the elements of the larger container with the elements of
the smaller container, but in such a way the the elements are repeated
(or tiled, hence the subject) until the larger container is full.

Here's a simple example: I have a deque<bool> and I'd like to fill it
up with alternating 1's and 0's. Naievely, this is how I would go
about it:


deque<bool>::iterator it;
deque<bool> coll(100);

for(it = coll.begin(); it != coll.end(); ++it)
{
*it = false;
*++it = true;
}

Of course this assumes that the size of coll is even. In general, this
translates to the size of the larger container being an integer
multiple of the size of the smaller container. I can live with that
assumption.

But even with the safety assumption, this seems clumsy and error prone.
Is there a better way to accomplish this?

Thanks in advance,
Bill

 
Reply With Quote
 
 
 
 
Steve Pope
Guest
Posts: n/a
 
      06-30-2006
http://www.velocityreviews.com/forums/(E-Mail Removed) <(E-Mail Removed)> wrote:

>Here's a simple example: I have a deque<bool> and I'd like to fill it
>up with alternating 1's and 0's. Naievely, this is how I would go
>about it:


>
> deque<bool>::iterator it;
> deque<bool> coll(100);
>
> for(it = coll.begin(); it != coll.end(); ++it)
> {
> *it = false;
> *++it = true;
> }


I would find any way of avoiding chaning the for loop's
variable both within the for statement, and within the body.

Personally I would first try:

deque<bool> coll(100);
deque<bool> falseTrue(2); // this is your source container
// could be any size

falseTrue[0] = false;
falseTrue[1] = true;

for (int ii=0; ii<(int)coll.size(); ii++)
coll[ii] = falseTrue[ii % falseTrue.size()];

Steve
 
Reply With Quote
 
 
 
 
Robbie Hatley
Guest
Posts: n/a
 
      06-30-2006

<(E-Mail Removed)> wrote:

> I've been flipping through the Josuttis book trying to find it there's
> a better way to accomplish this. Haven't come across anything so I
> thought I'd turn to the group.
>
> Suppose I have 2 containers, a large one and a small one. I would like
> to replace the elements of the larger container with the elements of
> the smaller container, but in such a way the the elements are repeated
> (or tiled, hence the subject) until the larger container is full.
>
> Here's a simple example: I have a deque<bool> and I'd like to fill it
> up with alternating 1's and 0's. Naievely, this is how I would go
> about it:
>
>
> deque<bool>::iterator it;
> deque<bool> coll(100);
>
> for(it = coll.begin(); it != coll.end(); ++it)
> {
> *it = false;
> *++it = true;
> }
>
> Of course this assumes that the size of coll is even. In general, this
> translates to the size of the larger container being an integer
> multiple of the size of the smaller container. I can live with that
> assumption.
>
> But even with the safety assumption, this seems clumsy and error prone.
> Is there a better way to accomplish this?


Yes. Probably lots, but this is what comes to my mind:

std::deque<widget> BigBox (1132);
std::deque<widget> LilBox (23);

// ... put stuff in LilBox here ...

std::deque<widget>::iterator i, j;

for (i=BigBox.begin(), j=LilBox.begin(); i != BigBox.end(); ++i,++j)
{
if (j == LilBox.end()) j=LilBox.begin();
(*i)=(*j);
}


Each time j reaches the end of LilBox, it just loops back to the
beginning; so the contents of LilBox tiles BigBox.


--
Cheers,
Robbie Hatley
Tustin, CA, USA
lonewolfintj at pacbell dot net (put "[ciao]" in subject to bypass spam
filter)
home dot pac bell dot net slant earnur slant


 
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
container inside container in stl wolverine C++ 2 07-24-2006 03:08 PM
Copy elements from one STL container to another STL container Marko.Cain.23@gmail.com C++ 4 02-16-2006 05:03 PM
std::transform container => std::abs(container) Steven T. Hatton C++ 4 12-05-2004 07:10 AM
STL: container's values setup by another container Maitre Bart C++ 2 02-11-2004 12:11 AM
std::container::iterator vs std::container::pointer Vivi Orunitia C++ 11 02-04-2004 08:09 AM



Advertisments