如何解决使整个对象恒定与使整个对象和内部对象恒定相同吗?
简而言之,问题是以下两个语句是否等效:
const std::vector<std::vector<int>>
和
const std::vector<const std::vector<int>>
因为在以下两个代码中,第一个无法编译!
#include <vector>
long findMaxSum(const std::vector<const std::vector<int>>& vecs) {
}
int main() {
std::vector<std::vector<int>> stacks(10,std::vector<int>(10)); //yeah yeah I know stacks is evil!
for (auto& stack : stacks) {
for (auto& elem : stack) {
elem = 4;
}
}
auto t = findMaxSum(stacks);
return 0;
}
#include <vector>
long findMaxSum(const std::vector<std::vector<int>>& vecs) {
}
int main() {
std::vector<std::vector<int>> stacks(10,std::vector<int>(10));
for (auto& stack : stacks) {
for (auto& elem : stack) {
elem = 4;
}
}
auto t = findMaxSum(stacks);
return 0;
}
解决方法
它们并不完全相同,但实际上您无能为力。
正如您所发现的那样,尝试创建元素为vector
的{{1}}通常会失败。
您可以将外部集合设为const
-它对包含的元素的要求并不严格,因此std::array
很好。
另一种可能性是将指针向量传递给const向量:
std::array<const std::vector<whatever>,SIZE>
这具有避免为每个分量向量制作副本只是将其传递给函数的附加优点。如果分量向量很大,这可能是一个实质性的考虑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。