I'm getting segfault errors when I use the erase() method in a class vector container.  I'm comparing two vectors and, so I want to remove from one of them the elements that are not present in the another. To do so, I'm using iterators and erase() as follow:  #include &lt;vector&gt;  int main () {  std::vector&lt;int&gt; vector1 {6,7,5,44,3,10,9,17,1}; std::vector&lt;int&gt; vector2 {1,2,3,5,8};  for (std::vector&lt;int&gt;::iterator it (vector2.begin()); it != vector2.end(); ++it) {     bool equal (false);     for (std::vector&lt;int&gt;::iterator jt (vector1.begin()); jt != vector1.end(); ++jt) {         if (*it == *jt) {             equal = true;             break       ;         }     }     if (!equal) {         vector2.erase(it);     } }  return 0; }   What is causing the segfault is the deletion of the last element in vector2 (8), because erase() cannot succesfully move the iterator from the previous end() position (no longer existant) to a new one.  How can this be prevented? I'm aware that unordered_set could be a proper container for this operation, but here I'm interested in vector.
634
I want to clear a element from a vector using the erase method. But the problem here is that the element is not guaranteed to occur only once in the vector. It may be present multiple times and I need to clear all of them. My code is something like this:  void erase(std::vector&lt;int&gt;&amp; myNumbers_in, int number_in) {     std::vector&lt;int&gt;::iterator iter = myNumbers_in.begin();     std::vector&lt;int&gt;::iterator endIter = myNumbers_in.end();     for(; iter != endIter; ++iter)     {         if(*iter == number_in)         {             myNumbers_in.erase(iter);         }     } }  int main(int argc, char* argv[]) {     std::vector&lt;int&gt; myNmbers;     for(int i = 0; i &lt; 2; ++i)     {         myNmbers.push_back(i);         myNmbers.push_back(i);     }      erase(myNmbers, 1);      return 0; }   This code obviously crashes because I am changing the end of the vector while iterating through it. What is the best way to achieve this? I.e. is there any way to do this without iterating through the vector multiple times or creating one more copy of the vector?
81177
What is the difference between a const_iterator and an iterator and where would you use one over the other?
8220
I know that the compiler will sometimes initialize memory with certain patterns such as 0xCD and 0xDD.  What I want to know is when and why this happens.  When  Is this specific to the compiler used?  Do malloc/new and free/delete work in the same way with regard to this?  Is it platform specific?  Will it occur on other operating systems, such as Linux or VxWorks?  Why  My understanding is this only occurs in Win32 debug configuration, and it is used to detect memory overruns and to help the compiler catch exceptions.  Can you give any practical examples as to how this initialization is useful?  I remember reading something (maybe in Code Complete 2) saying that it is good to initialize memory to a known pattern when allocating it, and certain patterns will trigger interrupts in Win32 which will result in exceptions showing in the debugger.  How portable is this?
8198
I am writing a small matrix library in C++ for matrix operations. However my compiler complains, where before it did not. This code was left on a shelf for 6 months and in between I upgraded my computer from debian etch to lenny (g++ (Debian 4.3.2-1.1) 4.3.2 ) however I have the same problem on a Ubuntu system with the same g++.  Here is the relevant part of my matrix class:  namespace Math {     class Matrix     {     public:          [...]          friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; stream, const Matrix&amp; matrix);     } }   And the "implementation":  using namespace Math;  std::ostream&amp; Matrix::operator &lt;&lt;(std::ostream&amp; stream, const Matrix&amp; matrix) {      [...]  }   This is the error given by the compiler:     matrix.cpp:459: error: 'std::ostream&amp;   Math::Matrix::operator&lt;&lt;(std::ostream&amp;,   const Math::Matrix&amp;)' must take   exactly one argument   I'm a bit confused by this error, but then again my C++ has gotten a bit rusty after doing lots of Java those 6 months. :-)
95859
Why does C/C++ differentiates in case of array index out of bound #include &lt;stdio.h&gt; int main() {     int a[10];     a[3]=4;     a[11]=3;//does not give segmentation fault     a[25]=4;//does not give segmentation fault     a[20000]=3; //gives segmentation fault     return 0; }  I understand that it's trying to access memory allocated to process or thread in case of a[11] or a[25] and it's going out of stack bounds in case of a[20000]. Why doesn't compiler or linker give an error, aren't they aware of the array size? If not then how does sizeof(a) work correctly?
53176
Apparently ;-) the standard containers provide some form of guarantees.  What type of guarantees and what exactly are the differences between the different types of container?  Working from  (about ) I have come up with this:  Container Types: ================ Container:     Forward Container         Reverse Container             Random Access Container     Sequence         Front Insert Sequence         Back  Insert Sequence     Associative Container         Simple   Associative Container         Pair     Associative Container         Sorted   Associative Container         Multiple Associative Container  Container Types mapped to Standard Containers =============================================  std::vector:    Sequence    Back        Sequence                    Forward/Reverse/Random Container std::deque:     Sequence    Front/Back  Sequence                    Forward/Reverse/Random Container std::list:      Sequence    Front/Back  Sequence                    Forward/Reverse Container std::set:       Sorted/Simple/Unique    Associative Container       Forward Container std::map:       Sorted/Pair/Unique      Associative Container       Forward Container std::multiset:  Sorted/Simple/Multiple  Associative Container       Forward Container std::multimap:  Sorted/Pair/Multiple    Associative Container       Forward Container   Container Guarantees: =====================                                                                                    Simp                                                                                   or                           For   Rev  Rand        Front  Back  Assoc        Sort   Mult                     Cont: Cont: Cont Cont: Sequ: Sequ:  Sequ: Cont:        Cont:  Cont: Copy    Const:      O(n) Fill    Const:                             O(n) begin()             O(1) end()               O(1) rbegin()                        O(1) rend()                          O(1) front()                                    O(1) push_front()                                     O(1) pop_front()                                      O(1) push_back()                                             O(1) pop_back()                                              O(1) Insert()                                                                          O(ln(n)) Insert: fill                               O(n) Insert: range                              O(n)                                   O(kln(n)+n) size()              O(n) swap()              O(1) erase key                                                     O(ln(n)) erase element                                                 O(1) erase range                                                   O(ln(n)+S) count()                                                       O(log(n)+k) find()                                                        O(ln(n)) equal range                                                   O(ln(n)) Lower Bound/Upper Bound                                                    O(ln(n)) Equality                  O(n) InEquality                O(n) Element Access                       O(1)
100090
I have a vector file containing thousands of points. Where points are within x distance from each other, I wish to delete one of the points and keep the other (either by snapping to one point, or simply erasing one of the two points)  However, in Whitebox the vector cleaning tool only works with polygons and lines.  Is there some other way I can do this with my shapefiles?
26644
If I have a vector of pairs: std::vector&lt;std::pair&lt;int, int&gt; &gt; vec;  Is there and easy way to sort the list in increasing order based on the second element of the pair? I know I can write a little function object that will do the work, but is there a way to use existing parts of the STL and std::less to do the work directly? EDIT:  I understand that I can write a separate function or class to pass to the third argument to sort.  The question is whether or not I can build it out of standard stuff.  I'd really something that looks like: std::sort(vec.begin(), vec.end(), std::something_magic&lt;int, int, std::less&gt;());
81821
In the  library, they are overloading the () operator.  Is this a convention in C++? For callbacks, etc.?  I have seen this in code of a co-worker (who happens to be a big Boost fan). Of all the Boost goodness out there, this has only led to confusion for me.  Any insight as to the reason for this overload?
17383
How do I concatenate two std::vectors?
18449
Hopefully a simple question. Take for instance a Circularly-linked list:  class ListContainer {   private listContainer next;   &lt;..&gt;    public void setNext(listContainer next)   {     this.next = next;   } }  class List {   private listContainer entry;   &lt;..&gt; }   Now since it's a circularly-linked list, when a single elemnt is added, it has a reference to itself in it's next variable. When deleting the only element in the list, entry is set to null. Is there a need to set ListContainer.next to null as well for Garbage Collector to free it's memory or does it handle such self-references automagically?
110259
Ierator and for-each loop both we use for traverse no of items, I have used for-each many times but I am not clear about iterator, means when we should use ierator. I am studying salesforce workbook example..  global class CustomIterable implements iterator&lt;Account&gt;{    public List&lt;Account&gt; accs {get; set;}   public Integer i {get; set;}    public CustomIterable(){      accs =[SELECT Name fROM Account limit 5];      i = 0;              }   global boolean hasNext(){          if(i &gt;= accs.size()) {          return false;         } else {          return true;         }    }    global Account next(){          if(i == 8){return null;}          i++;          return accs[i-1];     } }   //------------  @isTest(seealldata=true) global class IteratorClass{     public static testmethod void main(){          IteratorClass obj = new IteratorClass();         Iterator&lt;Account&gt; acs =  obj.Iterator();         system.debug(acs);      }     global Iterator&lt;Account&gt; Iterator(){             return new CustomIterable();          }  }
78
We all know you can't do the following because of ConcurrentModificationException:  for (Object i : l) {     if (condition(i)) {         l.remove(i);     } }   But this apparently works sometimes, but not always. Here's some specific code:  public static void main(String[] args) {     Collection&lt;Integer&gt; l = new ArrayList&lt;&gt;();      for (int i = 0; i &lt; 10; ++i) {         l.add(4);         l.add(5);         l.add(6);     }      for (int i : l) {         if (i == 5) {             l.remove(i);         }     }      System.out.println(l); }   This, of course, results in:  Exception in thread "main" java.util.ConcurrentModificationException   Even though multiple threads aren't doing it. Anyway.  What's the best solution to this problem? How can I remove an item from the collection in a loop without throwing this exception?  I'm also using an arbitrary Collection here, not necessarily an ArrayList, so you can't rely on get.
45967
I'm trying to make a simple blackjack program. Sadly, I'm having problems right off the bat with generating a deck of cards.  #include &lt;iostream&gt; #include &lt;vector&gt;  using namespace std;  int main() {     vector&lt;char&gt; deck;     char suit[] = {'h','d','c','s'};     char card[] = {'2','3','4','5','6','7','8','9','10','J','Q','K','A'};     for (int j=0; j&lt;13; j++) {         for (int i=0; i&lt;4; i++) {             deck.push_back(card[j] suit[i]);         }            }      return 0; }   I know my problem begins with me trying to assign the value '10' to a char. Obviously I couldn't get this to compile but I'm sure when I try to assign the card values to the vector deck I'll also get an error since I used variable type 'char'. Knowing what kind of variable type to use seems to be killing me. Also, would 'deck.push_back(card[j] suit[i]);' be the correct code to combine the card and suit, or do you have to put something between card[j] and suit[i]? I'd appreciate it if any of you could lead me in the right direction. Also as a little side note, this is part of a homework assignment so please don't just give me entire blocks of code. Thanks for your help.
53881
When I have a class I believe I no longer use, I usually attempt to delete it and see if there is an error. This strikes me as one of those things that just must be wrong...but I don't see another way. Can someone tell me what I must obviously be missing? :(
59407
What does the "bus error" message mean, and how does it differ from a segfault?
98843
In my initial basic tests it is perfectly safe to do so.  However, it has struck me that attempting to manipulate this later in a function that deletes this could be a runtime error.  Is this true, and is it normally safe to delete this? or are there only certain cases wherein it is safe?