Solved

simple Vector STL question

Posted on 2003-10-28
5
432 Views
Last Modified: 2013-12-14
vector<string> names;

for(vector<string>::iterator i = names.begin(); i !=names.end(); i++ )
{
           //how do I want a pointer to the strings in names, how do i get it?
}


I need pass a string* to another function, i'm getting an error because i is an iterator, how can I recover the pointer to the string?
0
Comment
Question by:jjacksn
5 Comments
 
LVL 48

Expert Comment

by:AlexFM
ID: 9639651
for(vector<string>::iterator i = names.begin(); i !=names.end(); i++ )
{
    cout "String: " << *i << "  Length: " << (*i).length();
}
0
 
LVL 5

Author Comment

by:jjacksn
ID: 9639657
I need the actual string *, I don't just want to print it out.  How do I get it back?
0
 
LVL 48

Accepted Solution

by:
AlexFM earned 100 total points
ID: 9639671
*i is string itself. &(*i) is string*

for(vector<string>::iterator i = names.begin(); i !=names.end(); i++ )
{
    OtherFunction( &(*i) );    
}
0
 
LVL 30

Expert Comment

by:Axter
ID: 9640828
You can also point to the string const char via c_str() member function.

char data[99];
for(vector<string>::iterator i = names.begin(); i !=names.end(); ++i)
{
          strcpy(data, i->c_str());
}

Here's a more optimize loop:
for(vector<string>::iterator i = names.begin(), i_end = names.end(); i != i_end; ++i)
{
          strcpy(data, i->c_str());
}
0
 
LVL 1

Expert Comment

by:fsign21
ID: 9641305
>I need pass a string* to another function, i'm getting an error because i is an iterator,
>how can I recover the pointer to the string?

May be, you want to do something like this?

using namespace std;
class VecStr
{
public:
  vector<string> names;

  string* findName(const string& val) {
    for(vector<string>::iterator i = names.begin(); i !=names.end(); i++ )
      {
        if((*i)==val)
          return &(*i);
      }
    return NULL;
  }
};

int main (int argc, char* argv[])
{
  VecStr vec;
  vec.names.push_back("Bob");
  vec.names.push_back("Ron");

  string* p = vec.findName("Bob");
  if(p) {
    cout << "Found" << endl;
  } else {
    cout << "Not Found" << endl;
  }
  string* p1 = vec.findName("Tom");
  if(p1) {
    cout << "Found" << endl;
  } else {
    cout << "Not Found" << endl;
  }
  return (0);
}

Output:
Found
Not Found
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

  Included as part of the C++ Standard Template Library (STL) is a collection of generic containers. Each of these containers serves a different purpose and has different pros and cons. It is often difficult to decide which container to use and …
IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
The viewer will learn how to synchronize PHP projects with a remote server in NetBeans IDE 8.0 for Windows.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now