> For the complete documentation index, see [llms.txt](https://smallso.gitbook.io/vector/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://smallso.gitbook.io/vector/learn/3.md).

# 尝试 Set & Get 元素

本页将介绍如何向指定 Vector 对象实例进行元素的 Set & Get 操作

### 前提条件

首先，我们需要创建一个 Vector 对象实例，然后 push 一个元素，以便进行元素的 set & get 操作。

{% code title="C" %}

```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);
}
```

{% endcode %}

### 尝试 Set 元素

已知元素索引号位于 `push_element_index` 变量，现在我们尝试设置（重写）该元素的值：

{% code title="C" %}

```c
element_value = 10;
vector_helper_set_element(vector_object, push_element_index, &element_value, 
    sizeof(element_value));
```

{% endcode %}

现在，我们已经调用 `vector_helper_set_element`函数设置元素 `push_element_index`的值为变量 `element_value`的值。

函数 `vector_helper_set_element` 的返回值类型为 `bool`，若设置指定元素的值失败，则返回 `false`，反之返回 `true`。通常情况下，建议您检查该函数的返回值。

### 尝试 Get 元素

我们刚才已经设置元素 `push_element_index` 的值为变量 `element_value` 的值，现在我们尝试获取该值：

{% code title="C" %}

```c
int get_element_value = 0;
vector_helper_get_element(vector_object, push_element_index,
    &get_element_value, sizeof(get_element_value));
```

{% endcode %}

现在我们已经通过调用 `vector_helper_get_element` 函数获取元素 `push_element_index`的值并存入 `get_element_value` 变量。

函数 `vector_helper_get_element` 的返回值类型为 bool，若获取指定元素的值成功返回 `true`，反之返回 `false`。通常情况下，建议您检查该函数的返回值。而不是忽略返回值直接使用 `get_element_value` 变量。

### 尝试 Unsafe Get 元素

为了降低对元素读取性能的影响，Vector Helper 内置了一个 **Unsafe** 函数 `vector_helper_get_element_value`。该函数在调用时仅简单的对调用参数进行检查并返回指定元素位于 Vector 对象实例中的 `void*` 内存指针。

{% hint style="danger" %}
除非必要，否则您不应该使用 vector\_helper\_get\_element\_value 函数。因为这是一个 **Unsafe** 函数，使用此函数时无法确保元素和缓冲区的完整性。您应该使用 vector\_helper\_get\_element 函数来获取指定元素的值。
{% endhint %}

{% code title="C" %}

```c
int get_element_value = *(int*)vector_helper_get_element_value(vector_object, 
    push_element_index); // unsafe
```

{% endcode %}

现在我们已经通过调用 `vector_helper_get_element_value` 函数获取元素 `push_element_index`的值并赋值给 `get_element_value`变量。

根据上述代码逻辑，我们尝试对函数 `vector_helper_get_element_value` 所返回的 `void*` 指针进行强制类型转换为 `int*` 并对 `int*` 进行内存读取，从而赋值给变量 `get_element_value`。而在这些过程中，无法确保该函数会返回无效指针，进而导致承载当前模块的进程实例崩溃。当然，您可以尝试对该函数返回的指针进行有效性检查，但也会因此影响性能。

若您坚持使用此函数，建议您遍历或仅读取元素的值时，将指针变量使用 `const` 关键字限定。

{% hint style="warning" %}
该函数使用预处理器条件编译选项 VECTOR\_ALLOW\_UNSAFE\_FUNCTION，该条件编译选项是默认启用的。当该选项为启用状态时，函数 vector\_helper\_get\_element\_value 以及其他 **Unsafe** 函数、数据类型、宏才会被编译。
{% endhint %}

### 相关 Vector Helper API 的详细介绍

{% content-ref url="/pages/-LNF20OR75BM43QDyMSS" %}
[元素存取与管理](/vector/apis/element.md)
{% endcontent-ref %}
