gpt4 book ai didi

c++ - 指向结构的 std::vector 的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:34 25 4
gpt4 key购买 nike

struct Struct_t {
int Value1;
int Value2;
};

vector<Struct_t> Struct;
Struct.resize(10, Struct_t());

for (int i = 0; i < 10; ++i)
{
Struct[i].Value1 = (i + 10) * 3;
Struct[i].Value2 = (i + 5) * 2;
}

如何创建指向 Struct[i] 的指针?

我想做的基本上是这样的,但我相信这可以做得更好:

int value = 6;
Struct_t temp = Struct[value], *s;
s = &temp;

s->Value1 = 42;
s->Value2 = 6;

主要目标是,我可以使用 1 行/函数轻松创建指向 Struct[n] 的指针。

最佳答案

到目前为止,提供的答案缺少房间里的大象。您可以像这样创建一个指向 vector 元素的指针:

(容易出错的)代码 list


#include <iostream>
#include <vector>

struct Struct_t {
int Value1;
int Value2;
};

int main(void)
{
std::vector<Struct_t> sVec;
sVec.resize(10, Struct_t());

int count = 0;
for (std::vector<Struct_t>::iterator vIt = sVec.begin(); vIt != sVec.end(); ++vIt)
{
vIt->Value1 = (count + 10) * 3;
vIt->Value2 = (count + 5) * 2;
count++;
}

Struct_t* pStruct = &sVec[5];

std::cout << "sVec[5] = (" << pStruct->Value1 << "," << pStruct->Value2
<< ")" << std::endl;

return 0;
}

示例输出


sVec[5] = (45,20)

但是,如果您要生成指向 vector/“数组”的各个元素的指针,则 vector 不是您想要使用的抽象类型。当 vector 需要调整大小时(收缩或增长),the iterators are invalidated ,因此您的指针将指向现在释放的内存,从而使您的程序崩溃。如果你想要直接指向 vector 元素的原始指针,你首先要:

  1. 使用列表而不是 vector
  2. 可能使用托管指针来处理引用计数。

最后,在处理vectorlisthash_table等模板类时,应该尽量习惯使用迭代器我在上面使用的示例,因为您不必担心在使用无效索引时检查异常(重载的 [] 运算符可以抛出异常,除非您将它们替换为 .at () 成员函数而不是元素访问)。

关于c++ - 指向结构的 std::vector 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31979046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com