469,625 Members | 1,089 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

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

What is wrong with the "for" loop?

Everything in this program produces the correct results except the part
dealing with the RealList. The "for" loop does not output the values that
were input to the ALL[3].RealList. What is the correct syntax to for this?
Thanks

#include <stdio.h>
#include <string>
#include <vector>

union AllType {
int Int;
double Real;
std::string* Text;
std::vector<double>* RealList;
};

void main()
{
std::vector<AllType> ALL;
ALL.reserve(10);
printf("sizeof(ALL)--->%d\n", sizeof(ALL));
printf("sizeof(AllType)--->%d\n", sizeof(AllType));
ALL[0].Int = 31415926;
ALL[1].Real = 3.1415926;
ALL[2].Text = new std::string("Hell Oh Whirled");
ALL[3].RealList = new std::vector<double>;
ALL[3].RealList->reserve(3);
ALL[3].RealList->push_back(123.0);
ALL[3].RealList->push_back(456.0);
ALL[3].RealList->push_back(789.0);
printf("%d\n", ALL[0].Int);
printf("%f\n", ALL[1].Real);
printf("%s\n", ALL[2].Text->c_str());
for (unsigned int N = 0; N < ALL[3].RealList->size(); N++)
printf("%d) %f\n", N, ALL[3].RealList[N]);
}

Jul 19 '05 #1
3 1774

"Peter Olcott" <ol****@worldnet.att.net> wrote in message
news:IR*********************@bgtnsc04-news.ops.worldnet.att.net...
Everything in this program produces the correct results except the part dealing with the RealList. The "for" loop does not output the values that were input to the ALL[3].RealList. What is the correct syntax to for this? Thanks

#include <stdio.h>
#include <string>
#include <vector>

union AllType {
int Int;
double Real;
std::string* Text;
std::vector<double>* RealList;
};

void main()
{
std::vector<AllType> ALL;
ALL.reserve(10);
printf("sizeof(ALL)--->%d\n", sizeof(ALL));
printf("sizeof(AllType)--->%d\n", sizeof(AllType));
ALL[0].Int = 31415926;
ALL[1].Real = 3.1415926;
ALL[2].Text = new std::string("Hell Oh Whirled");
ALL[3].RealList = new std::vector<double>;
ALL[3].RealList->reserve(3);
ALL[3].RealList->push_back(123.0);
ALL[3].RealList->push_back(456.0);
ALL[3].RealList->push_back(789.0);
printf("%d\n", ALL[0].Int);
printf("%f\n", ALL[1].Real);
printf("%s\n", ALL[2].Text->c_str());
for (unsigned int N = 0; N < ALL[3].RealList->size(); N++)
printf("%d) %f\n", N, ALL[3].RealList[N]);
}


The problem is that ALL[3].RealList is a pointer to a vector, rather
than the vector itself. Consequently the [] operator is performed on the
pointer rather than the vector. If you replace the for loop with this it
should work:

const std::vector<double>& v = *(ALL[3].RealList);
for (unsigned int N = 0; N < v.size(); N++)
{
printf("%d) %f\n", N, v[N]);
}

--
Peter van Merkerk
peter.van.merkerk(at)dse.nl
Jul 19 '05 #2
Peter Olcott <ol****@worldnet.att.net> wrote:
void main()
int main()
{
std::vector<AllType> ALL;
ALL.reserve(10);
You want 'resize' here, not 'reserve' if you want room for 10 items
printf("sizeof(ALL)--->%d\n", sizeof(ALL));
[This is the size of the vector's private data, completely unrelated to
the number of items stored there]
ALL[1].Real = 3.1415926;
ALL[2].Text = new std::string("Hell Oh Whirled");
ALL[3].RealList = new std::vector<double>;
ALL[3].RealList->reserve(3);


Same here.

Andre'

--
Those who desire to give up Freedom in order to gain Security, will not have,
nor do they deserve, either one. (T. Jefferson or B. Franklin or both...)
Jul 19 '05 #3
Peter> void main()
Peter> {
Peter> std::vector<AllType> ALL;
Peter> ALL.reserve(10);
Peter> printf("sizeof(ALL)--->%d\n", sizeof(ALL));
Peter> printf("sizeof(AllType)--->%d\n", sizeof(AllType));
Peter> ALL[0].Int = 31415926;
Peter> ALL[1].Real = 3.1415926;
Peter> ALL[2].Text = new std::string("Hell Oh Whirled");
Peter> ALL[3].RealList = new std::vector<double>;

These last four statements yield undefined behavior because ALL does
not have any elements, as you would see if you had executed

printf("ALL.size()--->%d\n", ALL.size()");

If you want to cause ALL to have 10 elements, you should execute

ALL.resize(10);

instead of calling reserve.
--
Andrew Koenig, ar*@acm.org
Jul 19 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

23 posts views Thread by Invalid User | last post: by
9 posts views Thread by adam | last post: by
32 posts views Thread by Toby Newman | last post: by
12 posts views Thread by Robbie Hatley | last post: by
5 posts views Thread by Fabian Vilers | last post: by
34 posts views Thread by Frederick Gotham | last post: by
9 posts views Thread by Alexnb | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.