加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 指向std :: vector结构的指针

发布时间:2020-12-16 07:13:20 所属栏目:百科 来源:网络整理
导读:struct Struct_t { int Value1; int Value2;};vectorStruct_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]的指针? 我想要做的就是这样,
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元素的指针,如下所示:

(容易出错)代码清单

#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 /“array”的各个元素的指针,vector不是您想要使用的抽象类型.当向量需要重新调整大小(缩小或增长)时,the iterators are invalidated,所以你的指针将指向现在释放的内存,导致你的程序崩溃.如果要将原始指针直接指向向量元素,首先需要:

>使用列表而不是向量.
>可能使用托管指针来处理引用计数.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读