#容器分类与各种测试1
#容器的内存结构
- 容器大致可分为两种
- Sequence Containers;序列式容器
- Associative Containers;关联式容器
- Unordered Containers;不定序容器
- 容器中内存结构
- Sequence Containers
- Array;
- Vector;通过分配器动态扩充内存。
- Deque;双向队列两端可进可出(对于内存分配双向可扩充需要重点学习)。
- List;双向环状链表。
- Forward-List;相对于环状链表,其每个内存块中少一个指针(占四个字节),则对于大量数据元素其结存节省是可观的。
- Associative Containers
- Set/Multiset;Set中value与key并不区分。
- Map/Multimap;Map中每个value对应一个key。
- 补充说明,Multi中key是可重复的。没有Multi中key是不可以重复的。
- Unordered Containers;
- HashTable Separate Chaining;通常称其为散列表
- Sequence Containers
#测试程序之辅助函数
1.得到整型输入内容
long get_a_target_long(){ long target=0; cout << "target (0~ " << RAND_MAX <<"):"; cin>>target; return target; }
2.将整型内容转换为字符串类型
string get_a_target_string(){ long target=0; char buf[10]; cout << "target (0~" << RAND_MAX <<"):"; cin>>target; snprintf(buf,10,"%d",target); return string(buf); }
#补充说明:snprintf为C中标准库内容,将其整型target存储到buf中最后string(buf)将其转换为字符串型。
3.传入对象指针,通过强制类型转换比较其大小
int comparelonogs(const void* a,const void* b){ return (*(long*)a-*(long*)b); } int compareString(const void* a,const void* b){ if(*(string*)a>*(string*)b) return 1; else if(*(string*)a<*(string*)b) return -1; else return 0; }