C++ and goto - can I?

U

Uzytkownik

I wrote:
....
for(int i = 0; i < somevar; i++)
{
bool b = true;
for(deque<int>iterator it = freeID.begin(); it != freeID.end(); it++)
if(i == (*it))
{
b = false;
break;
}
if(b)
ret.push_back(i)
}
....
Can I:
....
for(int i = 0; i < somevar; i++)
{
for(deque<int>iterator it = freeID.begin(); it != freeID.end(); it++)
if(i == (*it))
goto myfunction_find;
continue;
myfunction_find:
ret.push_back(i);
}
....

For me it's shorter, faster and more simple, but I've herd that goto in
c++ program could make problems.
Is it work everywhere and always?
Regards
 
M

msalters

Uzytkownik said:
I wrote:
...
for(int i = 0; i < somevar; i++)
{
bool b = true;
for(deque<int>iterator it = freeID.begin(); it != freeID.end(); it++)
if(i == (*it))
{
b = false;
break;
}
if(b)
ret.push_back(i)
}

Better algorithm might be:
std::vector<bool> in_freeID ( somevar, false );
for(deque<int>::const_iterator it = freeID.begin(); it != freeID.end();
it++)
{
in_freeID[*it] = true;
}
for( std::vector<bool>::const_iterator it = in_freeID.begin();
it != in_freeID.end(); ++it )
{
if (!*it)
ret.push_back(i);
}

My code is O(somevar+freeID.size), yours is O(somevar * freeID.size ).

That totally swamps any difference in efficieny from goto

HTH,
Michiel Salters
 

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
474,202
Messages
2,571,057
Members
47,663
Latest member
josh5959

Latest Threads

Top