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()成员函数替换它们而不是元素访问. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |