value_type和size_type,size_t

size_type和value_type只存在于STL中,他们并不是什么新的类型,只是普通类型的 typedef而已

size_type可以是一个无符号整形,它的大小与平台有关。在STL中使用size_type比使用unsinged兼容性更佳。在string中,size_type常用来表示字符串的长度,在vector中,常用来表示元素的个数.

value_type:STL是基于模板的。使用STL的时候,需要传入一个参数。那个参数的别名就是value_type 。。
定义如下:
template<typename T>
.....
typedef T value_type;

size_t 也是一个无符号整形,但是它是从C语言中继承过来的。所以在C++中它是通用的,不管是不是在STL中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尝试用数组设计一个模板类template<typename key_type,typename value_type > class map;map包含以下成员:map中表示键值对的结构体:struct instance {key_value key; value_type value };map中存储的instance指针数组:instance **INSTANCES;map的最大容量:int map_size;map中需要实现的函数:(1)map(int N); 函数的作用:map_size赋值为 N;利用map_size初始化数组INSTANCES,数组每个元素赋值 nullptr。(2)instance* search(key_value k);函数的作用:顺序遍历查找INSTANCES中是否有 k 对应的instance,若有,返回一个指向该instance的指针,否则返回 nullptr 。(3)void set(key_value real_key, value_type real_value);函数的作用:将 (real_key,real_value) 插入到INSTANCES中,插入的方式为:【1】首先调用函数 search(real_key),假设返回值为 res,如果 res 不是nullptr;那么说明此时 real_key 已经在 map 中对应了一个键值对,此时你需要修改 res 所指向对象的 value 为 real_value【2】若 【1】 中 res == nullptr,则你需要插入一个键值对;插入方式为:按照顺序遍历INSTANCES,当遍历第 i 个元素 INSTANCES[i] == nullptr时,利用参数real_key 和 real_value初始化一个 instance对象 , INSTANCES[i]指向该instance对象【3】若map满了,则打印出错(4)value_type* get(key_value k);函数的作用:调用 search 函数,查找 k 对应的 value,打印查找成功并返回一个指向 value 的指针;如果没有找到,返回nullptr(5)void delete(key_value k);函数的作用:顺序遍历查找INSTANCES中是否有 k 对应的instance,若有则释放掉
最新发布
05-31
好的,让我们来一步步实现这个模板类 map。 首先,我们需要定义 map 类和 instance 结构体,并声明一些成员变量和函数。根据题目要求,我们需要一个指向 instance 的指针数组 INSTANCES 和 map 的最大容量 map_size。 ```c++ template<typename key_type, typename value_type> class map { public: struct instance { key_type key; value_type value; }; instance **INSTANCES; int map_size; map(int N); instance* search(key_type k); void set(key_type real_key, value_type real_value); value_type* get(key_type k); void del(key_type k); }; ``` 接下来,我们需要实现构造函数 map(int N),这个函数的作用是将 map_size 赋值为 N,并初始化 INSTANCES 数组,将每个元素赋值为 nullptr。 ```c++ template<typename key_type, typename value_type> map<key_type, value_type>::map(int N) { map_size = N; INSTANCES = new instance*[map_size]; for (int i = 0; i < map_size; i++) { INSTANCES[i] = nullptr; } } ``` 接着,我们需要实现 search 函数,这个函数的作用是顺序遍历查找 INSTANCES 中是否有 k 对应的 instance,若有,返回一个指向该 instance 的指针,否则返回 nullptr。 ```c++ template<typename key_type, typename value_type> typename map<key_type, value_type>::instance* map<key_type, value_type>::search(key_type k) { for (int i = 0; i < map_size; i++) { if (INSTANCES[i] != nullptr && INSTANCES[i]->key == k) { return INSTANCES[i]; } } return nullptr; } ``` 然后,我们需要实现 set 函数,这个函数的作用是将 (real_key, real_value) 插入到 INSTANCES 中。首先,我们需要调用 search 函数查找是否已经存在 key 为 real_key 的 instance。如果已经存在,我们需要修改该 instance 的 value 为 real_value。如果不存在,我们需要按照顺序遍历 INSTANCES,找到第一个为 nullptr 的元素,利用参数 real_key 和 real_value 初始化一个 instance 对象,然后将该元素指向该 instance 对象。如果 map 已满,则打印出错。 ```c++ template<typename key_type, typename value_type> void map<key_type, value_type>::set(key_type real_key, value_type real_value) { instance *res = search(real_key); if (res != nullptr) { res->value = real_value; } else { int i = 0; while (i < map_size && INSTANCES[i] != nullptr) { i++; } if (i < map_size) { INSTANCES[i] = new instance; INSTANCES[i]->key = real_key; INSTANCES[i]->value = real_value; } else { std::cout << "Map is full." << std::endl; } } } ``` 接下来,我们需要实现 get 函数,这个函数的作用是调用 search 函数,查找 k 对应的 value,打印查找成功并返回一个指向 value 的指针;如果没有找到,返回 nullptr。 ```c++ template<typename key_type, typename value_type> value_type* map<key_type, value_type>::get(key_type k) { instance *res = search(k); if (res != nullptr) { std::cout << "Find the value of key " << k << ": " << res->value << std::endl; return &(res->value); } else { return nullptr; } } ``` 最后,我们需要实现 del 函数,这个函数的作用是顺序遍历查找 INSTANCES 中是否有 k 对应的 instance,若有则释放掉。 ```c++ template<typename key_type, typename value_type> void map<key_type, value_type>::del(key_type k) { instance *res = search(k); if (res != nullptr) { delete res; res = nullptr; } } ``` 到此为止,我们已经完成了这个模板类 map 的实现。现在你可以在自己的代码中使用它,例如: ```c++ map<int, std::string> my_map(10); my_map.set(1, "hello"); my_map.set(2, "world"); my_map.get(1); my_map.get(2); my_map.del(1); my_map.get(1); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值