gpt4 book ai didi

每个循环的 C++ vector 不会遍历引用?

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:51 24 4
gpt4 key购买 nike

昨天我几乎花了一个小时来调试这个东西,从那以后我就一直在想它。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)
v.push_back(m_default);

在上述形式中,range-for 循环使用存储在 m_vect 中的项目的拷贝 (v) 进行迭代。

如果你想直接操作 referencesm_vect 中的项目,你应该明确说明,使用 auto& :

// v references items in m_vect
for (auto& v : m_vect) {
v.push_back(m_default);
}

您可能会发现 this StackOverflow answer on using C++11 range-for有趣。

关于每个循环的 C++ vector 不会遍历引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36150673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com