gpt4 book ai didi

c++ - 在用户定义的类型上使用 std::ptrdiff_t

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:43 24 4
gpt4 key购买 nike

我有一个名为 node 的简单结构,它包含一个值 + 2 个指向下一个/上一个节点的指针。

template <class T>
struct node {

node<T> *prev = NULL;
node<T> *next = NULL;
T data;
};

这里我们有向末尾添加一个新节点的函数。

void push_back( T val ) {           

node<T> *n = new node<T>; // create node to hold val
n->data = val; // set node data with val

if ( node_count == 0 ) {

begins = n; // begins points to first node
}
else{

ends->next = n; // set next in ends
n->prev = ends; // set previous
}

ends = n; // update ends
node_count++; // update list size
}

在 main 中,我们创建了 100 个链接节点,每个节点都有一个唯一的 int 值。

for (int i = 0; i != 100; i++){  push_back(i); }

这是指向第一个/最后一个节点的指针:

node<T> *begins; 
node<T> *ends;

当尝试应用指针算法时,麻烦就开始了:

std::ptrdiff_t node_sum = ends - begins;

node_sum == 528,如果我进行 x32 编译,则 node_sum == 781。

为什么 node_sum 不是 100?

最佳答案

您的节点不是数组的一部分。它们分别分配在内存分配器可以为它们找到的任何位置。您不能减去它们并期望任何特定值。事实上,这样做是未定义的行为。为了计算链表中节点之间的距离,您需要按照 next 或 prev 指针遍历它。

关于c++ - 在用户定义的类型上使用 std::ptrdiff_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758511/

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