尝试 Set & Get 元素
本页将介绍如何向指定 Vector 对象实例进行元素的 Set & Get 操作
首先,我们需要创建一个 Vector 对象实例,然后 push 一个元素,以便进行元素的 set & get 操作。
C
Vector vector_object = vector_helper_create_object(sizeof(int), 1, 99);
if(vector_object)
{
int element_value = 0;
size_t push_element_index = 0;
vector_helper_push_element(vector_object, &element_value,
sizeof(element_value), &push_element_index);
// ...
vector_helper_destroy_object(vector_object);
}
已知元素索引号位于
push_element_index
变量,现在我们尝试设置(重写)该元素的值:C
element_value = 10;
vector_helper_set_element(vector_object, push_element_index, &element_value,
sizeof(element_value));
现在,我们已经调用
vector_helper_set_element
函数设置元素 push_element_index
的值为变量 element_value
的值。函数
vector_helper_set_element
的返回值类型为 bool
,若设置指定元素的值失败,则返回 false
,反之返回 true
。通常情况下,建议您检查该函数的返回值。我们刚才已经设置元素
push_element_index
的值为变量 element_value
的值,现在我们尝试获取该值:C
int get_element_value = 0;
vector_helper_get_element(vector_object, push_element_index,
&get_element_value, sizeof(get_element_value));
现在我们已经通过调用
vector_helper_get_element
函数获取元素 push_element_index
的值并存入 get_element_value
变量。函数
vector_helper_get_element
的返回值类型为 bool,若获取指定元素的值成功返回 true
,反之返回 false
。通常情况下,建议您检查该函数的返回值。而不是忽略返回值直接使用 get_element_value
变量。为了降低对元素读取性能的影响,Vector Helper 内置了一个 Unsafe 函数
vector_helper_get_element_value
。该函数在调用时仅简单的对调用参数进行检查并返回指定元素位于 Vector 对象实例中的 void*
内存指针。除非必要,否则您不应该使用 vector_helper_get_element_value 函数。因为这是一个 Unsafe 函数,使用此函数时无法确保元素和缓冲区的完整性。您应该使用 vector_helper_get_element 函数来获取指定元素的值。
C
int get_element_value = *(int*)vector_helper_get_element_value(vector_object,
push_element_index); // unsafe
现在我们已经通过调用
vector_helper_get_element_value
函数获取元素 push_element_index
的值并赋值给 get_element_value
变量。根据上述代码逻辑,我们尝试对函数
vector_helper_get_element_value
所返回的 void*
指针进行强制类型转换为 int*
并对 int*
进行内存读取,从而赋值给变量 get_element_value
。而在这些过程中,无法确保该函数会返回无效指针,进而导致承载当前模块的进程实例崩溃。当然,您可以尝试对该函数返回的指针进行有效性检查,但也会因此影响性能。若您坚持使用此函数,建议您遍历或仅读取元素的值时,将指针变量使用
const
关键字限定。该函数使用预处理器条件编译选项 VECTOR_ALLOW_UNSAFE_FUNCTION,该条件编译选项是默认启用的。当该选项为启用状态时,函数 vector_helper_get_element_value 以及其他 Unsafe 函数、数据类型、宏才会被编译。