C/C++ :: Storing Map Iterator In Vector?
Jan 10, 2013
I'm trying out the code below; it runs and produces the output I'd expect, but could it lead to undefined behavior?
To test with, I show the key and wait for user input; if the input doesn't match the value, the iterator is stored in the vector.
map<string, string> test;
map<string, string>::iterator it;
vector<map<string, string>::iterator> bad_input;
string input;
test["key 1"] = "value 1";
[Code] ....
I am also interested in knowing if I can use an iterator to walk through the vector? I tried
vector<map<string, string>::iterator>::iterator v_it;
for(v_it = bad_input.begin(); v_it != bad_input.end(); ++v_it)
cout << v_it-> ??
However, I couldn't figure out how to access "first" and "second" using this method. Is it possible to do so?
View 2 Replies
ADVERTISEMENT
May 25, 2013
I am receiving the error: Vector Iterator not incrementable. However, when erasing I'm already re-setting 'it' and pre-incrementing at the end of the while-clause.what's wrong?
vector<st>::iterator it = map[0][0].begin();
while(it != map[0][0].end()) {
if((*it).val == 5) {
[Code] .....
View 1 Replies
View Related
Sep 4, 2013
I defined the following function to find out the iterator of a certain value in the vector. I defined it as such so if the value exist in the vector then return a iterator of it, if not then return a pointer pointing to nonsense.:
vector<tIndex_t>::iterator unlabelTit(const tIndex_t index) {
for(vector<tIndex_t>::iterator it=unlabelT.begin(); it<unlabelT.end(); it++) {
if(index==*it) return it;
} return NULL;
}
But looks this one is not accepted by compiler, saying I cannot do this kind of comparison like:
unlabelTit(i)!=NULL;
so I just delete the return NULL; and then the compiler giving me warning about no return statement before }.
a pointer pointing to nonsense? how to do that?
View 3 Replies
View Related
Nov 18, 2013
I'm working on a program where I have a vector full of <myClassType> structs.
I'm trying to insert items into a vector, searching first through the vector to make sure the value isn't already in the vector before inserting it. The "find" function isn't working properly.
I keep getting C2678 "binary '==': no operator found which takes a left-hand operand of type "myClassType" or there is no conversion errors in Visual Studio 2010.
I know it's something having to do with the find function and my iterators, but I can't, for the life of me, figure out what it is.
I've tried switching to const_iterators, but I get the same error message.
void foo::insert(const myClassType& en) {
vector<myClassType>::iterator it;
vector<myClassType>::iterator it1;
it = find(Table.begin(), Table.end(), en.memberOne);
[Code] .....
View 3 Replies
View Related
Oct 31, 2014
I have two classes, Parent and Child, where Parent contains a vector that is used to store instances of Child. When I create an instance of Parent, three instances of Child are also created in Parent's constructor and stored in the vector. I understand that push_back() creates a shallow copy of each Child instance and that Child's destructor is called each time the loop (inside Parent's constructor) iterates. The problem is that because Child's destructor is called each time the local variable child goes out of scope, the memory previously allocated in Child's constructor is destroyed and when Child's destructor is called again later on in the program to get rid of the copy stored in vector, the program crashes. I can fix this by overriding the default copy function or by storing pointers to objects instead of copies of objects. I don't really need to use vectors in this case since I always have three children in one parent but I'm doing this as a learning exercise and would prefer to use vectors.
#include <iostream>
#include <vector>
class Child {
public:
Child() {
std::cout << "child constructor called" << std::endl;
[Code] .....
View 3 Replies
View Related
Jul 13, 2014
I'm having trouble storing a string in a vector.
I keep getting the errors in lines 51-54: no suitable constructor exist to convert from
#include <iostream>
#include <string>
#include <vector>
#include "Movie.h"
using namespace std;
vector <string> movieActors;
void promptForMovie(Movie & myMovie);
[code]....
View 6 Replies
View Related
Feb 3, 2014
I've got something I'm trying to accomplish, but crashes my program.
I've got my server and client code.
Having the client send a message they type (char Chat[1024]) And the server receiving the chat (char recv_chat[1024]) only to send it to all connected clients again. Which the server sends the recv_chat.
The client receives it (char recv_chat[1024]). This works, and the client gets the right info. However, I'm trying to store it using a vector. I'm sure I've tried any way possible.
Client storing vector pseudo-code:
vector<char*> SaveChat;
int main () {
while (true) {
if (newClientConnected) {
[Code]....
This doesn't work, and crashes my application. I've tried changing the vector to string, const char*, basically anything I can with no avail.
View 8 Replies
View Related
Jun 6, 2012
I have a hierarchy of Actions (NonMovingActions and MovinActions each with sub-hierarchies). Actions class has an abstract function.
Code:
class Action {
public:
Action(Agent& agent, ...):agent(agent),..{}
virtual ~Action(void);
virtual bool run()=0;
[Code]...
It appears that C++ does not allow this (in Java it was possible). Compiler objects that Action class is abstract (and cannot be instantiated?!)
Code: error C2259: 'Action' : cannot instantiate abstract class
1- May I know what do I not understand here? We cannot refer to sub-class instances with a reference of parent class type?
2- Should I use vector of pointers instead or what?
View 6 Replies
View Related
Jun 17, 2013
I'm making my first steps in STL, and I have a few question:
Is there a way to get an iterator to the i'th element in the collection (set or list), instead of just to the end or the begin?
And another question: Let's say I have an iterator, pointing to some element in my collection, and I use erase() (which takes as parameter an iterator that points to the soon-to-be erased element), what happens to that iterator? will it now point to NULL?
View 7 Replies
View Related
Aug 20, 2014
I have this class with template:
template<template<class, class> class ContainerType>
class Movie {
public:
typedef ContainerType<Actor*, std::allocator<Actor*> > Container;
and i have a member func to find actor in movie according to actor id:
const Actor* findActor(int id) const {
typename Container::iterator it;
Actor* p(NULL);
it=actors.begin();
std::for_each(it,actors.end(),(*it)->getId()==id?p=*it:0);
if (p==*actors.end()) return NULL;
return p;
}
I receive error that no match for operator= in it.
How to declare correct iterator ?the type of actors is Container..
View 6 Replies
View Related
Apr 8, 2014
Why this code works
Elenco e1;
e1.add(Persona("a","b"));
e1.add(Persona("c","d"));
e1.add(Persona("e","f"));
e1.add(Persona("e","f"));
e1.remove(2); //list of 4 elements
but this not work?
Elenco e1;
e1.add(Persona("a","b"));
e1.add(Persona("c","d"));
e1.add(Persona("e","f"));
e1.remove(2); //list of 3 elements
This is remove method:
Persona Elenco:: remove(int pos){
list<Persona> ::iterator iter=l.begin();
for(int i=0 ;i<pos;i++){
iter++;
}
return *(l.erase(iter)); //erase ritorna un iterator
}
View 4 Replies
View Related
Nov 18, 2013
Here's a few parts of a program I'm working at. It does compile, and it does work as expected. Anyway Eclipse Kepler marks one line as a bug with the remark Field 'befehl' could not be resolved. The bug sign didn't show up when both classes were in one file.
ScriptInterpreter maintains and processes a vector of Objects, initialised with example data. An iterator of the vector keeps track of the current position while various methods process the data. I've copied the relevant lines only.
I can live with a few wrongly bug-marked lines in Eclipse. What I don't want is any hidden errors that express at some time later.
Is there anything wrong with the code? Anything that's not recommended and compiles anyway? Is anything c++11-specific about the questionable line?
AtomicCommand.h
class AtomicCommand {
public:
int befehl;
[Code] .....
Note that line 9 has a bug sign, too. Eclipse doesn't recognise all my c++11 code.
View 4 Replies
View Related
Feb 22, 2013
I am running some simulation, in which i need to control the iterator of a multimap, like
multimap<double, int> mapp;
......
int n=6;
for(int i=0; i<5; i++) {
for(auto it = mapp.begin()+i*n; it!=mapp.begin()+(i+1)*n; it++) {
......
However this way of controlling is not possible for multimap. Why and how the make it work? Do I need to overload the operator +?
View 14 Replies
View Related
May 24, 2013
I can't seem to make the STL iterator class work how I need it to.I am implementing a multi list graph and I need to iterate through my STL list of Vertex pointer objects. I keep getting the error:
Error 1 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::_List_iterator<_Mylist>' (or there is no acceptable conversion) and the same for != for my terminating condition.
template <typename V, typename E>
void Graph<V, E>::InsertEdge(V from, V to, E edge) {
list<Vertex<V>*>::iterator iter;
for(iter = m_Vertices.begin(); iter != m_Vertices.end(); ++iter)
[code].....
View 2 Replies
View Related
Jan 21, 2013
I just figured out that some std functions (for example: copy) need the resource and target objects have iterators to work. Otherwise, the compiler rejects. In case of two arrays, declared as:
double myA[100] = {};
array<double, 100> myB = {};
myA[0] is like a pointer, myB.begin() an iterator, if I do not make any mistake. So, what is exactly the difference between the pointer and the iterator here? They all give the access to elements.
If I need the target of copy to be an array like myA which cannot give an iterator, is there a way to make the command "copy" work for it?
View 9 Replies
View Related
Jan 25, 2013
I want to get the iterator position after to use find if:
std::list<Texture*>::iterator result = find_if(
texturelist.begin(),
texturelist.end(),
std::bind2nd<CompareTEX>(CompareTEX(),n_tex));
if (result != texturelist.end()) {
return // position result
}
View 5 Replies
View Related
Apr 10, 2014
We were given a task to use lists and iterators. We were supposed to make them from scratch. I'm done with that. The problems that I'm having are as following:
1. I'm not able to access the list made of Course datatype which is present in each Student instance. Does this mean I need to make an iterator for that course list inside the student class?
2. Similarly since I don't have direct access to The course list so I added the course into the Student list through the student objects not through the iterator. How can I do it through the iterator?
3. Printing of a particular student and his courses is not happening as my iterator made for student only prints out the students, not the courses present in their courselist. How to do that?
Here's the code
#include <iostream>
#include <string>
using namespace std;
const int ILLEGAL_SIZE = 1;
const int OUT_OF_MEMORY = 2;
const int NO_SPACE = 3;
const int ILLEGAL_INDEX = 4;
[Code] .....
View 1 Replies
View Related
Jan 5, 2015
I have created a multimap for my road points. The key refers to the road number and the values are vec3 points that make up the road.
I am trying to iterate through the values of each key point and create a road segment at each point on the road (except the last), adjust the values to be on the road points and then store them in a std::vector.
The RoadSegment constructor creates 6 vec3 points and pushes them onto a std::vector.
I have a segmentation fault in the line marked in bold
[for(mapIt = it.first; mapIt != it.second; ++mapIt)]
When i take out the lines creating the new objects and pushing them onto the std::vector it works fine.
std::vector<glm::vec3>::iterator SegIt;
for(int i = 0; i < m_genRoads->getKeyValueData().size(); i++)
{
int numberDesired = m_genRoads->getMultimapData().count(i) - 1;
[Code]...
View 1 Replies
View Related
Mar 6, 2013
I have a list and a vector, for example like
list<int> mylist = {1, 1, 1, 0, 0, 1, 0, 0}
vector<int> myvec;
I want to create an efficient algorithm to erase all element of value "1", and give these elements to a vector. My code (not efficient) is as follows
for(auto it = mylist.begin(); it != mylist.end(); it++) {
if(*it == 1) {
myvec.push_back(*it);
it = mylist.erase(it);
if(it != mylist.begin())
it--;
}
}
View 8 Replies
View Related
Jun 24, 2014
I'm trying to make a function to show the content of maps as follows:
template<typename A, typename B>
void show_map(const std::map<A,B> &src) {
for( std::map<A,B>::iterator it=src.begin(); it!=src.end(); ++it ) {
cout << it->first << " ____ " << it->second << endl;
}
};
However, I got this error in the 'for' line: "error: expected ‘;’ before ‘it’" (and then errors that it is not declared, etc). I'm sure that there is no missing ; in other functions. If you try to write a random line before that you get no error there for example, always in the for.
It is there something that you need to do with iterators when you declare generic datatypes?
View 4 Replies
View Related
Oct 15, 2014
I got the core dump file so I know exactly which line it crashes. Below are some of the information:
OS: Red Hat Enterprise 5.8
Example snippets of when the crash happen:
Code:
typedef map<int, MyClassObj> MyMapT;
.
.
void someFunction( MyMapT& inMap )
{
for ( MyMapT::iterator iter=inMap.begin(); iter!=inMap.end(); ++iter )
{
.
.
}
}
Using GDB, I am able to find out that it crashes at the "++iter" as the .h file indicate it was a "++" operation for the iterator. Tracing up the stack frame it indicate it crash during the copy constructor of some "__rb_tree_node". I did some Googling and it seems that is some Red-Black tree implementation for the map. Honestly I do not quite understand the Red-Black tree and I believe STL map is a very very well tested container, so the problem must lie in my code so that I can look out for it.
View 14 Replies
View Related
Feb 7, 2012
Code:
it = m_CoopTable->m_SparseMap.find(s);
if (it != NULL) //Error
{
return false;
}
This gives me compile-time error. it is an iterator to a hash_map
View 9 Replies
View Related
May 22, 2014
In order to parse mathematical expressions I am trying regular expressions and a recursive algorithm, but I have a problem with the four basic operations: +, -, *, /.
Trying to analyze a string like "a+(b+c)", if I use the pattern for a sum "(.+)+(.+)" the program matches it recognizing as subpatterns: "a+(b" and "c". How could I achieve the program to try also the other possibility?
I think that it would be great something like an regex_iterator which worked with regex_match instead of regex_search. I mean, an iterator that iterates over all the possible ways to match a given regular expression and a given string. This way I could loop through all these possibilities until the two subpatterns produced were correct mathematical expressions.
View 3 Replies
View Related
Aug 25, 2014
I know that if I erase a value inside an iterator, it becomes invalidated, and this is how you would normally fix it:
for(std::vector<int>::iterator it = list.begin(); it<list.end(); ) {
if((*it) == 5)
list.erase(it);
else
it++;
}
But what about a double loop? like this one:
This would delete all duplicates
for(std::vector<int>::iterator it = list.begin(); it<list.end(); it++) {
for(std::vector<int>::iterator it2 = list.begin(); it2<list.end(); it2++) {
if((*it) == (*it2))
list.erase(it2);
}
}
View 6 Replies
View Related
Jul 9, 2012
Below is the sample of the code :
int summation = 0;
for (it= s.begin(); it!= s.end(); ++it) {
summation += std::atoi( ((*it).substr( 8 )).c_str() );
}
Nos after the first 8 characters are the ones I need to perform addition on.
do the summation of these nos.
View 14 Replies
View Related
Nov 27, 2014
im trying to port a code from vc6 to vs2013 and im having this error
Code:
Error11error C2440: 'initializing' : cannot convert from 'char *' to 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<char>>>' on this line
Code:
vector<char>::iterator BufIt = (char*)lpBuffer;
what i do with this is to stack fragments of data of type char* coming from a socket in buffer to a vector that acts as buffer, I do this since I transfer big chunks of data and the data gets fragmented by the nature of the sockets, I stack the data once its complete I retrieve the final result from the vector.
this code worked flawlessly for long time but now Im trying to port and compiler throws this error, whats the new way to assign a char array pointer to a iterator so i can stack it in the vector.
View 5 Replies
View Related