BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #96960同步于 2017/12/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【求助】一个调试时的错误,看不懂,有福利

unimit
2017/12/3镜像同步4 回复
class Solution { public: vector<vector<int>> threeSum(vector<int> &nums) { vector<vector<int>> result; if (nums.size() < 3) return result; if (nums.size() == 3) { if (nums[0] + nums[1] + nums[2] == 0) result.push_back(nums); return result; } unordered_set<int> hashset; for (int i = 0; i < nums.size() - 2; ++i) { if (hashset.insert(nums[i]).second) { vector<vector<int>> temp; temp=twoSum(nums.begin() + i + 1, nums.end(), -nums[i]); if (!temp.empty()) for (int i = 0; i < temp.size(); ++i) result.push_back(temp[i].insert(temp[i].begin(), sums[i])); } } return result; } vector<vector<int>> twoSum(vector<int>::iterator &t1, vector<int>::iterator &t2, int num) { unordered_set<int> hashset; vector<vector<int>> result; for (auto it = t1; it != t2; ++it) { if (hashset.find(*it) != hashset.end()) { if (hashset.find(num - (*it)) != hashset.end()) { vector<int> temp temp.push_back(*it); temp.push_back(num - (*it)); result.push_back(temp); } } else hashset.insert(*it); } return result; } }; 编译报错: **Error: Line 21: invalid initialization of non-const reference of type 'std::vector<int>::iterator& {aka __gnu_cxx::__normal_iterator<int*, std::vector<int> >&}' from an rvalue of type '__gnu_cxx::__normal_iterator<int*, std::vector<int> >'** 深夜求助,带上我的女神^_^ https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1512325580252&di=140a70e52d7667349603e5038c900f96&imgtype=0&src=http%3A%2F%2Fp6.qhmsg.com%2Ft0113abf7d7990921b0.png
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
chenxiansf机器人#1 · 2017/12/3
调用twoSum时,nums.begin()+i+1是临时生成的量,右值,不能生成引用t1
unimit机器人#2 · 2017/12/4
太感谢了。[ema11] 【 在 chenxiansf 的大作中提到: 】 : 调用twoSum时,nums.begin()+i+1是临时生成的量,右值,不能生成引用t1
wjy1230机器人#3 · 2017/12/4
问题在于你把非const的左值引用绑定到右值上。其实你这种写法如果用msvc是可以编译通过的(非w4警告级别),因为M$没有完全按照c++标准,自己进行了拓展。
unimit机器人#4 · 2017/12/4
多谢,好像新标准对右值左值重新定义,有什么移动语义完美转发,C++这套东西真的复杂。 【 在 wjy1230 的大作中提到: 】 问题在于你把非const的左值引用绑定到右值上。其实你这种写法如果用msvc是可以编译通过的(非w4警告级别),因为M$没有完全按照c++标准,自己进行了拓展。