Solved

Question re: iterators...ASAP...please...

Posted on 2004-10-18
5
257 Views
Last Modified: 2013-12-14
Do I need to use iterators when comparing strings within vectors?
I need to compare strings from one vector to strings in another vector.  The size of the vectors are different.
0
Comment
Question by:jewee
5 Comments
 
LVL 4

Accepted Solution

by:
pankajtiwary earned 300 total points
ID: 12343037
Hi jewee,

Do not confuse. Iterators are objects to iterate through the elements of a container ( e.g vector ), if you want to iterate through a vector and so *something* you need iterators. Do check this example out.

// Code not tested
#include <iostream>

using namespace std ;

int main() {
    vector v1<string>(2);
    vector v2<string>(4);

    v1.push_back("abc");
    v1.push_back("def");

    v2.push_back("ghi");
    v2.push_back("jkl");
    v2.push_back("abc");
    v2.push_back("def");

    for ( vector<string>::const_iterator it1 = v1.begin(); it1 != v1.end(); it1++) {
        for ( vector<string>::const_iterator it2 = v2.begin(); it2 != v2.end(); it2++) {
            if ( *it1 == *it2 )
                doSomething();
        }
    }
    return 0 ;
}

Hope this helps.

Cheers!
0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 100 total points
ID: 12343424
Ooops, haven't seen that you opened a seperate Q - here's the code again I posted in the last one:

string str = "substring";
vector<string> vs;

for ( vector<string>::iterator i = vs.begin(); i != vs.end(); ++i) {

    if ( -1 != i->find(str)) {

        cout << "Found " << str->c_str() " in in " i->c_str() << endl;
    }
}

If you want to find the exact match, use

if ( *i == str )

like pankajtiwary already suggested.
0
 
LVL 1

Assisted Solution

by:gugario
gugario earned 50 total points
ID: 12343568
There's two ways you can access elements in a vector... one is using the bracket operator, so if you have...

vector<string> a;
vector<string> b;

you could do

if (a[0] == b[1]) cout << "equal";

another is dereferencing an iterator.. so you could have iteractors to the vectors, like

vector<string>::iterator t1 = a.begin();
vector<string>::iterator t2 = b.begin();

if (*t1 == *t2) cout << "equal";

bracket operators, in my opinion, are easier to use.  and part of the reason you would use a vector is so that you could do the direct access with the brackets..

iterators are good i guess if you need to iterate through both vectors completely... but you could still do it with for loops.

hope that helps.

Gustavo
0
 
LVL 9

Expert Comment

by:jhshukla
ID: 12344692
if you like to use bracket operators like Gustavo, vect.size() is the upper bound.
0
 
LVL 17

Assisted Solution

by:rstaveley
rstaveley earned 50 total points
ID: 12348514
There are a lot of nice algorithms you can use that do the iterator work for you.

e.g.
--------8<--------
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

typedef std::vector<std::string> StringVector;

class match {
      const std::string &name;
      const StringVector& cmp;
public:      
      match(const StringVector& cmp,const std::string& name) : cmp(cmp),name(name) {}
      void operator()(const std::string& str) const
      {
            bool found = find(cmp.begin(),cmp.end(),str) != cmp.end();
            std::cout << str << (found?" found ":" not found ") << "in " << name << '\n';
      }
};

int main()
{

      StringVector v1;
      v1.push_back("abc");
      v1.push_back("def");

      StringVector v2;
      v2.push_back("ghi");
      v2.push_back("jkl");
      v2.push_back("abc");
      v2.push_back("def");

      for_each(v2.begin(),v2.end(),match(v1,"v1"));
}
--------8<--------
0

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

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

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…
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 be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

821 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