gpt4 book ai didi

超过 "tuple"的 C++11 范围

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:01 25 4
gpt4 key购买 nike

我正在尝试使用 C++11 功能实现哈希类。我没有重复使用 STL 的哈希,因为这是一项学校作业。我正在尝试这样做:

for(auto &h : {H1[hash_func(n1, val)], H2[hash_func(n2, val)]}) {
for(auto &x : h) {
if(x == val) {
swap(x, h.back());
h.pop_back();
}
}
}

H1H2类型为 vector<T>* .当我尝试编译它时,我遇到了一个我什至无法理解的讨厌的语法错误。如果我尝试 for(auto &h : {H1, H2})并使用 h[hash_func(n1, val)]而不是 h ,它有效(尽管它显然是错误的)。我怎样才能解决这个问题? (或者至少以比两次编写相同的东西更优雅的方式实现它)

最佳答案

从您发布的错误消息来看,该错误与这段文字完全无关,而是由您尝试交换 const 引起的 int .原因是你的 H1[…]初始化列表中的访问是复制 vector ,因此您最终得到一个隐式绑定(bind)到 const 的临时对象。引用。因此, vector 的成员是 const

比这更糟糕的是:即使你修复了这个错误,你的代码也不会工作,因为你正在访问错误的类型。您的成员初始化如下:

H1 = new vector<T>[n];

H1是指向单个 vector 的指针。从那时起,您几乎肯定不希望在您的代码中使用索引访问它:

H1[hash_func(n1, val)]

如果hash_func产生除0以外的任何东西您的代码访问了无效内存。

为什么是H1H2无论如何指针? 不要使用手动内存管理。只需使用普通 vector 。

关于超过 "tuple"的 C++11 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15860710/

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