如何快速从 std::vector 中拾取元素<struct>?
How to pick up elements from std::vector<struct> quickly?
我有一个结构MyStruct
,它有一些元素(包括int value1
(和一个std::vector<MyStruct>
。我如何从每个MyStruct
中提取所有的value1
,并拥有一个std::vector<int>
,它是value1
的向量。不会对新矢量进行写入操作。
以下内容是可能的,但需要副本。有什么解决方案可以避免它吗?
struct MyStruct{
int value1;
int value2
};
std::vector<MyStruct> myStruct = func1();
std::vector<int> ans;
for (auto i:myStruct)
{
ans.push_back(i.value1);
}
func2(ans); //func2 (const vector<int>&);
结构结构只是一个例子。我使用的实际结构要复杂得多。
这里是:
auto ret = func1();
std::vector<int> ans;
ans.reserve(ret.size());
for (auto const& elem : ret) {
ans.emplace_back(elem.value1);
}
template_back直接从参数elem.value1构造元素,而push_back则从从同一个参数(即elem_value1(创建的副本构造元素。
如果MyStruct仅由两个int值组成,则可以将其替换为std::pair<int,int>它是一个具有两个公共成员的结构,即第一个和第二个。您的value1将是第一位,value2将是第二位。你可以这样做:
#include <utility>
#include <vector>
using MyStruct = std::pair<int, int>;
std::vector<MyStruct> func1(/*params...*/) {
std::vector<MyStruct> ret;
// grow ret
return ret;
}
然后在main((中替换
ans.emplace_back(elem.value1);
带有
ans.emplace_back(elem.first);
我认为一个更优化的解决方案是更改func2
,通过引用将&std::vector<MyStruct>
作为参数,这样就不会进行复制。然后您可以通过myStruct[i].value1
访问每个元素。
您想要的是引用类型,而不仅仅是任何类型,而是引用的引用,这正是指针进入图片的地方
std::vector<int*> ans;
for (int i = 0; i < myStruct.size(); i++ )
{
ans.push_back(&myStruct.at(i).value1);
}
试试这个,请让我知道它应该可以解决你的问题
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C++Union/Struct位域的实现和可移植性
- <<操作员在下面的行中工作
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 错误:"Left of getValue must have class/struct/union"
- 在 SVM-Struct 中未定义对 sqrt 的引用(已使用 -lm)
- 数据类型"struct seq<0, 1, 2>{}"含义是什么?
- 附加使用 Struct 作为"multikey"并将 std::vector 用作映射值的映射
- QML/C++/QObject Struct Copy
- 如何在 cpp 中解压缩数字,如果它们是使用 struct.pack(fmt, v1, v2, ..) 打包在 pyth
- Msgpack能否提供更好的性能和与Python的struct.pack()相同的功能?
- 将向量传递给<struct> Lua 表
- MPI_DOUBLE_INT and C++ struct
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一