首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使整个对象恒定是否等同于使整个对象和内部对象恒定?

使整个对象恒定是否等同于使整个对象和内部对象恒定?
EN

Stack Overflow用户
提问于 2020-09-08 12:08:50
回答 1查看 48关注 0票数 0

简而言之,问题是以下两种说法是否等价:

代码语言:javascript
运行
复制
const std::vector<std::vector<int>>

代码语言:javascript
运行
复制
const std::vector<const std::vector<int>>

因为,在下面的2个代码中,第一个代码不能编译!

code1

代码语言:javascript
运行
复制
#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;
}

code2

代码语言:javascript
运行
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-08 13:37:22

它们并不完全相同,但对此你真的无能为力。

正如您已经发现的,尝试使用const元素创建vector通常会失败。

您可以将外部集合设置为std::array--它对其包含的元素没有严格的要求,因此std::array<const std::vector<whatever>, SIZE>是完全合适的。

另一种可能是将指针向量传递给常量向量:

代码语言:javascript
运行
复制
// receive a vector of pointers to const vectors:
int findMaxSum(std::vector<const std::vector<int> *> &outer) {
    std::vector<int> sums;
    std::transform(outer.begin(), outer.end(), 
        std::back_inserter(sums), 
        [](auto v) { return std::accumulate(v->begin(), v->end(), 0); });

    return *std::max_element(sums.begin(), sums.end());
}

int main() { 
    const std::vector<int> a {1, 2};
    const std::vector<int> b {3, 4};

    // pass only the address of each of the component vectors:
    std::vector<const std::vector<int> *> c { &a, &b};
    std::cout << findMaxSum(c) << "\n";
}

这有一个额外的好处,那就是避免复制每个分量向量,只是为了将其传递给函数。如果分量向量很大,这可能是一个重要的考虑因素。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63786972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档