使用结构对象

时间:2015-04-29 06:42:07

标签: c++ vector struct

我的逻辑如下所示(不是实际代码):

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 。我没有使用错过任何内容吗?

另外,我传递了这个向量,并以另一种方法接受对它的引用。

而且,如果我要读回矢量元素,这是对的吗?

Structure element xx = mYvector.begin()
print xx.Elem1
print xx.Elem2

欢迎任何优化或不同的想法。

1 个答案:

答案 0 :(得分:3)

  

我的观察是否正确?

是的,如果向量是<table id="attachmentTypeTable" class="appconfig-data-table attachment-type-table"> <tbody> <tr> <tr id="28RemoveAType"> <tr id="27RemoveAType"> <tr id="26RemoveAType"> <td><span class="qa-type-id-label-for-26">Transfer cover</span></td> <td> </tr> <tr id="25RemoveAType"> <td><span class="qa-type-id-label-for-25">Photograph</span></td> <td> </tr> </tbody> </table> <script type="text/javascript"> var x = document.querySelectorAll('[class^="qa-type-id-label-for-"]'); for(var i=0;i< x.length;i++){ document.write('result'+i+':'+x[i].innerHTML+'<br/>'); } </script> ,在这种情况下,如果推送了内容,它会保留自己的副本。

  

上述是否最佳?

它是次优的,因为它会导致向量的基础数据缓冲区的许多重新分配,以及不必要的赋值和副本。编译器可以优化一些赋值和副本,但是没有理由,例如,在循环中重新设置std::vector<StructureElement>的元素。

您可以像这样简化:

x

这将创建一个包含所需值的std:vector<StructureElement> v(1000, StructureElement{20, 30}); 副本的size-1000向量,这就是您在伪代码中尝试的内容。

要阅读元素,您可以选择。如果要迭代所有元素,则基于范围的for循环:

StructureElement

使用迭代器,

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;