c++模板类vector等原理推断

文章解释了C++中vector如何动态扩展内存,当push_back元素时会重新分配内存并释放旧空间,导致可能的错误。示例代码展示了这一过程及其输出结果。
摘要由CSDN通过智能技术生成

        刚开始接触vector的时候觉得好高级,不仅可以做到变长数组,而且随用随加,非常方便,网上有一种说法说vector是一开始申请了某一段固定大小内存,比如1000个元素长度,如果不够了再重新申请一段倍长的内存,但是事实真是如此吗,请先看如下程序:

#include <iostream>
#include <vector>
using namespace std;

struct Node
{
	int data;
	Node* last;
};

int main(void)
{
	vector<Node> node_list;
	Node node_1;
	node_1.data = 1;
	Node node_2;
	node_2.data = 2;

	node_list.push_back(node_1);
	node_2.last = &node_list[0];
	cout << node_2.last->data << endl;
	node_list.push_back(node_2);
	cout << node_list[1].last->data << endl;

	return 0;
}

        上述程序将自定义的两个node压入栈中,预测的输出应该是“1 换行 1”,但是实际输出变成了“1 换行 -572662307”,这是为什么呢,可能你已经想到了vector在每次增长时进行的操作,没错,在每次增长进行push_ back的时候,会重新申请多一个元素的内存,同时将之前的内存释放,这就导致了输出的错误,可以见得c++的其他模板类估计也是这样处理的,所以我们在使用时要小心这种错误。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值