【发布时间】:2016-07-09 02:54:00
【问题描述】:
昨天我花了几乎我们的时间来调试这个东西,从那以后我就无法停止思考它。C
我尝试用字符串索引实现二维矩阵...
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)。
标签: c++ vector foreach reference pass-by-reference