?
Solved

simple Vector STL question

Posted on 2003-10-28
5
Medium Priority
?
438 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

Question has a verified solution.

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

Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
Suggested Courses

801 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