昨天我花了将近一个小时来调试这个东西,从那以后,我就一直在想它。C
我试图实现一个带有字符串索引的2D矩阵...
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;
};
在进行了一些插入操作后,当我尝试访问一个元素时,如下所示:
m_vect[0][0] = 8;
我遇到了无效的写入和段错误...并且m_vect[0].size()
的值为0;
我尝试了一切,最终当我将for each循环改为普通循环时,问题得到了解决。
for (int i = 0; i < m_vect.size(); i++){
m_vect[i].push_back(m_default);
程序工作良好...
这意味着,v
不是一个引用,而是元素的一个新副本吗?
谢谢 (代码中可能会有拼写错误,我是在手机上写的...)
for (auto& v : m_vect)
。 - n. m.