我的逻辑如下所示(不是实际代码):
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
欢迎任何优化或不同的想法。
答案 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;