c++ vector for each loop doesn't iterate through references?

Viewed 2135

yesterday I spent almost an our while debugging this thing and since then I can't stop thinking about it.C

I tried to implement a 2D matrix with string indexes...

class CSqrMatrix(){
  ....
  void insert(string str){
     bool b = map.insert(str,m_size).second;
     if (b){
         m_size++;
         vector<int> ve;
         for (int i = 0; i < m_vect.size(); i++) 
             ve.push_back(m_default);
         m_vect.push_back(ve);
         for (auto v : m_vect)
             v.push_back(m_default);
     }
  ...
map<string,int> map;
vector < vector<int> > m_vect;
int m_default;
int m_size;
};

after some insertions, when I tried to reach an element like

m_vect[0][0] = 8;

I got an invalid write and segfault... and the value of m_vect[0].size() was 0; I tried everything, when finally I changed the for each loop to a normal one like

for (int i = 0; i < m_vect.size(); i++){
     m_vect[i].push_back(m_default);

the program worked well...

So does that mean, that v ins't a referecne, but a new copy of the element?

Thanks (there might be typos in the code, I wrote it on the phone...)

3 Answers
Related