C++ 使用结构对象

C++ 使用结构对象,c++,vector,struct,C++,Vector,Struct,我有如下逻辑(不是实际代码): 据我所知,x只能分配一次内存,并且每次迭代都会覆盖现有的值。 此外,推入向量的“x”不会受到随后推入修改的“x”的迭代的影响 我的观察正确吗 以上是最优的吗?我希望将内存消耗降至最低,并且不希望使用new。不使用new是否遗漏了任何内容 另外,我通过另一种方法传递这个向量并接收对它的引用 如果我读回向量元素,这是对的吗 Structure element xx = mYvector.begin() print xx.Elem1 print xx.Elem2 任何

我有如下逻辑(不是实际代码):

据我所知,x只能分配一次内存,并且每次迭代都会覆盖现有的值。 此外,推入向量的“x”不会受到随后推入修改的“x”的迭代的影响

我的观察正确吗

以上是最优的吗?我希望将内存消耗降至最低,并且不希望使用new。不使用new是否遗漏了任何内容

另外,我通过另一种方法传递这个向量并接收对它的引用

如果我读回向量元素,这是对的吗

Structure element xx = mYvector.begin()
print xx.Elem1
print xx.Elem2
任何优化或不同的想法都是受欢迎的

我的观察正确吗

是的,如果向量是
std::vector
,在这种情况下,如果被推入,它会保留自己的副本

以上是最优的吗

它是次优的,因为它会导致向量底层数据缓冲区的多次重新分配,以及不必要的分配和拷贝。编译器可能会优化某些赋值并将其复制出去,但没有理由(例如)在循环中重新设置
x
的元素

您可以这样简化它:

std:vector<StructureElement> v(1000, StructureElement{20, 30});
使用迭代器

for (auto it = begin(v); it != end(v); ++it)
   std::cout << it->Elem1 << it->Elem2 << std::endl;

如果(20,30)组合是可变的怎么办?如果我在运行时阅读它们呢?@这一点同样适用。这里没什么区别。谢谢,请给我一些时间研究一下。@MykhayloKopytonenko这是伪代码。
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), ....);