capacity和reserve只适用于vector(C++中的vector如何定义动态元素)
本文目录
- C++中的vector如何定义动态元素
- 为什么调用 std:map:clear 后内存占用率没有降低
- std:vector的reserve和resize的区别
- vector中下标操作符与push_back的一些疑惑
- STL中容器的常用函数
- 如何使用vector的reserve和resize方法
C++中的vector如何定义动态元素
用vector就可以不用指定大小啊,可以自动增长的,如果你vector还要指定其大小还不如直接用数组来得方便.
为什么调用 std:map:clear 后内存占用率没有降低
记住C++ 清理 new 关键的内存 只有delete 才能释放。 map 就是一个 模板类而已 会调用析构函数。 你认为它会 写delete吗 答案是不会的。 map 存的是对象可以释放内存。 但是 存的是指针 只能自己释放。
std:vector的reserve和resize的区别
vector中的reserve和resize的区别reserve:分配空间,更改capacity但是不改变sizeresize:分配空间,同时改变capacity和size详解:1) reserve只是预留空间大小,并没有实际创建元素,所以不能引用其中的元素,此时vector的容量等于预留空间的大小,size为0;需要用push_back()/insert()函数插入元素。2) resize分配空间的同时实际创建元素,此时vector的容量等于size,可以引用其中的元素(用operator操作符,或者用迭代器来引用元素对象)。3)二者的函数形式有区别:reserve接收一个参数,表示预留空间的大小;resize可以接收两个参数:分配空间的大小和要加入的新元素的值,如果第二个参数被省略,那么就调用元素对象的默认构造函数。举例:#include《iostream》#include《vector》using namespace std;void main(){vector《int》 a;a.reserve(10);cout 《《 "a的容量:"《《 a.capacity() 《《 " ;a的大小:"《《 a.size() 《《 endl;/*for (int i = 0; i 《 10; i++ ){a.push_back(i); //新元素这时才构造}*/vector《int》 b;b.resize(10);cout 《《 "b的容量:"《《 b.capacity() 《《 " ;b的大小:" 《《 b.size() 《《 endl;cout 《《 "b 《《 endl;vector《int》 b1;b1.resize(10,7);cout 《《 "b1的容量:"《《 b1.capacity() 《《 " ;b1的大小:" 《《 b1.size() 《《 endl;cout 《《 "b1 《《 endl;vector《int》 c;cout 《《 "c的容量:"《《 c.capacity() 《《 " ;c的大小:" 《《 c.size() 《《 endl;vector《int》 d(10);cout 《《 "d的容量:"《《 d.capacity() 《《 " ;d的大小:" 《《 d.size() 《《 endl;cout 《《 "d 《《 endl;vector《int》 d1(10,7);cout 《《 "d1的容量:"《《 d1.capacity() 《《 " ;d1的大小:" 《《 d1.size() 《《 endl;cout 《《 "d1 《《 endl;} 输出:a的容量:10 ;a的大小:0b的容量:10 ;b的大小:10b=0b1的容量:10 ;b1的大小:10b1=7c的容量:0 ;c的大小:0d的容量:10 ;d的大小:10d=0d1的容量:10 ;d1的大小:10d1=7
vector中下标操作符与push_back的一些疑惑
你这个代码本身就有问题,不应该能运行的= =。。。因为reserve并不更改vector的大小,这样你写v存在。reserve我基本不用,因为好像没有什么实际效果,因为reserve只增加vector的容量(capacity),但却没有增加大小,建议使用resize来代替。在刚定义vector的时候,里面会默认为0个元素,一旦使用了push_back以后,那个元素就会被加进去,比如你这个v.push_back(1)就是把1加入到vector里面,那么这个vector的元素就由原来的{}(空的)变成了{1},如果再v.push_back(2)就变成{1,2}。push_back总是把新元素加在后面并且同时增加vector的容量和大小。要想同时改变vector的容量和大小,你可以用push_back自动加,也可以用resize来自定义大小,比如v.resize(5)就是把这个vector的大小变成5。如果你v.resize(2);v.push_back(1);v = 2; 那么这个vector的元素就变成{0,2,1}cout 《《 v 《《 endl; //这里的结果就是0cout 《《 v 《《 endl; //这里的结果就是2
STL中容器的常用函数
vector:Constructors 构造函数 Operators 对vector进行赋值或比较 assign() 对Vector中的元素赋值 at() 返回指定位置的元素 back() 返回最末一个元素 begin() 返回第一个元素的迭代器 capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下) clear() 清空所有元素 empty() 判断Vector是否为空(返回true时为空) end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置) erase() 删除指定元素 front() 返回第一个元素 get_allocator() 返回vector的内存分配器 insert() 插入元素到Vector中 max_size() 返回Vector所能容纳元素的最大数量(上限) pop_back() 移除最后一个元素 push_back() 在Vector最后添加一个元素 rbegin() 返回Vector尾部的逆迭代器 rend() 返回Vector起始的逆迭代器 reserve() 设置Vector最小的元素容纳数量 resize() 改变Vector元素数量的大小 size() 返回Vector元素数量的大小 swap() 交换两个Vector list:assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 如果list是空的则返回true end() 返回末尾的迭代器 erase() 删除一个元素 front() 返回第一个元素 get_allocator() 返回list的配置器 insert() 插入一个元素到list中 max_size() 返回list能容纳的最大元素数量 merge() 合并两个list pop_back() 删除最后一个元素 pop_front() 删除第一个元素 push_back() 在list的末尾添加一个元素 push_front() 在list的头部添加一个元素 rbegin() 返回指向第一个元素的逆向迭代器 remove() 从list删除元素 remove_if() 按指定条件删除元素 rend() 指向list末尾的逆向迭代器 resize() 改变list的大小 reverse() 把list的元素倒转 size() 返回list中的元素个数 sort() 给list排序 splice() 合并两个list swap() 交换两个list unique() 删除list中重复的元素 stack:操作 比较和分配堆栈 empty() 堆栈为空则返回真 pop() 移除栈顶元素 push() 在栈顶增加元素 size() 返回栈中元素数目 top() 返回栈顶元素 queue:back() 返回最后一个元素 empty() 如果队列空则返回真 front() 返回第一个元素 pop() 删除第一个元素 push() 在末尾加入一个元素 size() 返回队列中元素的个数
如何使用vector的reserve和resize方法
stdafx.h// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #pragma once #include "targetver.h" #include 《stdio.h》 #include 《tchar.h》 // TODO: reference additional headers your program requires here #include 《iostream》 #include 《vector》 #include 《string》 using namespace std; test.cpp// test.cpp : Defines the entry point for the console application. // #include "stdafx.h" class A { public: A() : m_a(0) { } A(int a) : m_a(a) { } A(const A& a) : m_a(a.m_a) { } ~A() { } private: int m_a; }; int _tmain(int argc, _TCHAR* argv = 2; cout 《《 "capacity:" 《《 myVec.capacity() 《《 endl; cout 《《 "size:" 《《 myVec.size() 《《 endl; return 0; } 输出:reserve用来(预留空间,)改变capacity,不改变size,会去分配内存,但不会构造出对象;如果改变后的capacity比当前capacity大,则capacity会变大;反之,capacity不变。
更多文章:
result函数(c语言result是什么意思作用是什么是函数么-3d是什么意思占三位是指什么有什么作用)
2024年7月23日 13:39
rank函数排序不跳过并列数值(怎么用excel排名次不并列)
2024年5月17日 04:32
plsql编程教程(plsql中怎么调用带输出参数的存储过程)
2024年7月3日 06:53
js replace替换最后一个(js 替换字符串中最后一个逗号为冒号)
2024年9月26日 22:55
海报设计网站(有没有一些优质的海报、网页设计的网站除了46design里边有的..)
2024年6月13日 02:17
cactus怎么读(“cactus”是什么意思它的读音是什么)
2024年7月8日 19:09
option selected(js 怎么动态设置 option 的selected 选项)
2024年7月1日 01:29
assembled什么意思(assembled in china什么意思)
2024年5月4日 10:22