std::list implementation&pointer arithemetic.
std::list implementation & pointer arithemetic.
据我所知,std::vector在每次元素增长或收缩时分配/取消分配所需的所有内存,因此可以使用指针算术来迭代向量元素。
另一方面,std::list使用双链表,每个元素都指向下一个和上一个元素。
假设(可能是错误的)std::list动态地分配它的内存,所以如果需要的话,内存是增量分配的。std::list如何仍然能够提供指针算术作为迭代其元素的手段?。
粗略地说,可以假设std::list::iterator
是指向列表元素struct iterator { list::element *current };
的指针的容器。元素有指向下一个和上一个元素的指针,比如struct element { list::element *next, *previous };
。当你递增迭代器时,它只会重新分配这个指针指向下一元素。类似于链表中的it->current = it->current->next
。不涉及指针算法。
相关文章:
- C++ - "!pointer"和"pointer == nullptr"的区别?
- "No-Const Pointer to Const "调用功能
- "owned pointer"和 std::shared_ptr 的"stored pointer"有什么区别?
- 删除分配的 (?) 指针时"Pointer being freed was not allocated"
- C++ 中的构造函数、继承、堆栈、堆、this-pointer 和段错误
- "Called Object Type is Not a Function or Pointer" 与 typedef 和类
- 马洛克会在 C++17 年返回"invalid pointer value"吗?
- c++为什么decltype(*pointer)会产生引用
- 指向对象生存期之外的已分配内存的指针是"invalid pointer[s]"还是"pointer[s] to an object"?
- 为什么"non-standard syntax; use '&' to create a pointer to member"在 CTOR 中使用线程?
- Golang CGO with large char pointer语言 - SEGSERV
- 向量<pointer>:插入(迭代器,指针)插入垃圾值
- 在 C++ 中,这两种"pointer delete"操作有什么区别?
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- "error: subscripted value is not an array, pointer, or vector",我正在使用字符串
- 如何捕捉"free(): invalid pointer:"
- 如何从SetWindowShookex回调中调用Fuction-Pointer
- 'Pointer to member'错误C++
- if(!pointer) 和 if(!*pointer) 有什么区别?
- std::list implementation&pointer arithemetic.