使用结构对象
Working with structure objects
我有一个如下所示的逻辑(不是实际代码):
StructureElement x;
For i in 1 to 1000
do
x.Elem1 = 20;
x.Elem2 = 30;
push(x into a std::vector)
end
我的知识是,x只分配一次内存,并且每次迭代都会覆盖现有值。此外,推送到向量的"x"不会受到推送修改后的"x"的后续迭代的影响。
我的观察是对的吗?
以上是最佳的吗?我希望保持最小的内存消耗,并且不喜欢使用new。我不使用 new 会遗漏什么吗?
此外,我传递了这个向量并接收到它的引用,它是另一种方法。
而且,如果我要读回矢量元素,这是对的吗?
Structure element xx = mYvector.begin()
print xx.Elem1
print xx.Elem2
欢迎任何优化或不同的想法。
是我的观察是对的吗?
的,如果向量是 std::vector<StructureElement>
,在这种情况下,如果推送的内容,它会保留自己的副本。
以上是最佳的吗?
它是次优的,因为它会导致向量的基础数据缓冲区的许多重新分配,以及不必要的赋值和副本。编译器可能会优化一些赋值和副本,但没有理由,例如,在循环中重新设置x
元素。
您可以像这样简化它:
std:vector<StructureElement> v(1000, StructureElement{20, 30});
这将创建一个 size-1000 向量,其中包含具有所需值的StructureElement
副本,这似乎是您在伪代码中尝试的。
要读回元素,您有选择。如果要遍历所有元素,则基于范围的 for 循环:
for (const auto& e: v):
std::cout << e.Elem1 << " " << e.Elem2 << std::endl;
使用迭代器,
for (auto it = begin(v); it != end(v); ++it)
std::cout << it->Elem1 << it->Elem2 << std::endl;
或者,将范围传递给算法
std::transform(begin(v), end(v), ....);
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 具有引用成员的结构是否具有唯一的对象表示形式
- 为什么我们再次从结构对象创建结构变量?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- C++:对象将 lambda 存储到结构中,稍后调用该函数
- 如何在C++中表示JSON文档的递归对象结构?
- 哪些值存储在对齐的结构/类对象的填充字节中
- 结构对象的指针成员在传递给函数时被修改
- C++ 提升 - 包含类层次结构对象的类的序列化
- 在 c++ 中使用字符串变量选择静态类结构,而不带对象
- 如何通过不同的指针使用类的对象访问结构?(链表)(C++)
- 是否可以在C++ (C) 中使用全局范围对象(结构)?
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- 如何使用方法返回指向对象结构的指针?
- 对象/结构等的C++内存布局是什么?
- 这些不同的对象结构之间有什么区别
- 如何找到C++可执行文件的所有对象(类对象/结构)
- C/C++ 中的对象/结构对齐
- 额外的继承对对象结构或实例化有影响吗?
- 尝试处理嵌套对象/结构和动态数组时出现内存泄漏或内存错误。可能的 Xcode/malloc 问题