Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

simple Vector STL question

Posted on 2003-10-28
5
Medium Priority
?
442 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 400 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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Programmer's Notepad is, one of the best free text editing tools available, simply because the developers appear to have second-guessed every weird problem or issue a programmer is likely to run into. One of these problems is selecting and deleti…
Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
THe viewer will learn how to use NetBeans IDE 8.0 for Windows to perform CRUD operations on a MySql database.
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…

577 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