gpt4 book ai didi

c++ - 结构节点类数组中的 lower_bound

转载 作者:行者123 更新时间:2023-11-27 22:39:50 25 4
gpt4 key购买 nike

我正在尝试添加 Node<K,V> (struct)放入一个数组(类)中并使用 lower_bound 对其进行排序.在调试我的代码时,我意识到它停止工作:

auto itr = std::lower_bound...

这是我的 add功能代码:

    template<typename K, typename V>
bool MapSet<K,V>::add(Node<K,V> n){
if(find_key(n.first) != nullptr){
return false;
}


if(last_ == capacity_){
grow();
}
else{
Node<K,V> res;
res.first = n.first;
res.second = n.second;
Node<K,V>* newarr = new Node<K,V>[capacity_];
auto itr = std::lower_bound(ary_,ary_+last_,res);
size_t itrind = std::distance(ary_, find_key((*itr).first));
size_t newcount = 1;

for (size_t i = 0; i < itrind; i++) {
newarr[i] = ary_[i];
newcount++;
}
newarr[newcount] = res;

for (size_t i = newcount+1; i < capacity_; i++) {
newarr[i] = ary_[i];
}


delete [] ary_;
ary_ = newarr;
last_++;
return true;
}
}

这是find_key功能代码:

   template<typename K, typename V>
Node<K,V>* MapSet<K,V>::find_key(K key){
std::cout << "find func" << '\n';
for(size_t i=0; i < capacity_; i++){
if((ary_[i]).first == key){
Node<K,V>* lol = &ary_[i];
return lol;
}
else{
continue;
}
}
return nullptr;
}

grow()将数组的大小加倍。 Node<K,V>有成员first(K)second(V) , 和类 MapSet有数组 ary_这是一个节点数组,

last_ (size_t)是数组的最后一个非空元素并且 capacity_ (size_t)是数组的大小。

那么我的lower_bound有什么问题吗?功能还是错误可能在其他地方?有什么建议吗?谢谢!

编辑:我还在以下位置遇到段错误:

Node<K,V>* lol = &ary_[i];

编辑:我修复了指出的关于 sizeof(ary_) 和 delete [] ary_ 的错误,但我仍然遇到段错误。

最佳答案

这是一个主要问题:

ary_ = newarr;
delete [] newarr;

首先你让 ary_ 指向与 newarr 指向的内存相同的内存。您现在有两个指向同一内存的指针。

然后释放两个指针指向的内存。

如果您尝试取消引用 ary_ 之后您将得到 undefined behavior .

另一个问题是:

new Node<K,V>[sizeof(ary_)];

因为 ary_ 是一个指针(我假设因为你没有向我们展示 Minimal, Complete, and Verifiable Example )然后 sizeof(ary_) 给出您是指针的大小,而不是它指向的内容。

您可以通过停止使用指针和您自己的手动内存管理来轻松解决这两个问题,而是使用 std::vector .

关于c++ - 结构节点类数组中的 lower_bound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49850517/

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