C++ 获取向量中所有元素的特定分量
我已经将结构的一些元素存储在向量中,我们称之为C++ 获取向量中所有元素的特定分量,c++,vector,C++,Vector,我已经将结构的一些元素存储在向量中,我们称之为myStruct。 现在我想得到这个结构的某个组件,它是我的向量中所有元素的的 有没有可能在不使用for循环的情况下快速执行此操作?对于deque,是否有等效的解决方案 struct myStruct{ int a; int b; }; vector<myStruct> vec; //creating some data and push back to vector myStruct ms0,ms1; ms0.a =
myStruct
。
现在我想得到这个结构的某个组件,它是我的向量中所有元素的的
有没有可能在不使用for循环的情况下快速执行此操作?对于deque
,是否有等效的解决方案
struct myStruct{
int a;
int b;
};
vector<myStruct> vec;
//creating some data and push back to vector
myStruct ms0,ms1;
ms0.a = 5;
ms1.a = 10;
vec.push_back(ms0);
vec.push_back(ms1);
//now I want to get the component a of ms0 and ms1
struct myStruct{
INTA;
int b;
};
向量向量机;
//创建一些数据并推回矢量
myStruct ms0、ms1;
ms0.a=5;
ms1.a=10;
向量推回(ms0);
向量推回(ms1);
//现在我想得到ms0和ms1的组件a
内部向量
使用数组,因此您可以使用[]
操作符直接访问其元素
例如:
cout您可以使用两个向量,一个存储组件a
,一个存储组件b
,而不是一个向量存储对(a
,b
)
如果这对您不起作用,您可以这样做(这是C++11或更高版本):
std::for_each(vec.begin(),vec.end(),
[](myStruct&v){std::cout向量是序列容器,更具体地说,数组可以动态更改其大小,因此访问其所有元素将需要与其大小成比例的时间,n
。因此,第一个问题的答案是:
有没有可能在不使用for循环的情况下快速执行此操作
是:没有
关于第二个问题:
对于deque
,是否有等效的解决方案
struct myStruct{
int a;
int b;
};
vector<myStruct> vec;
//creating some data and push back to vector
myStruct ms0,ms1;
ms0.a = 5;
ms1.a = 10;
vec.push_back(ms0);
vec.push_back(ms1);
//now I want to get the component a of ms0 and ms1
是的,有,它看起来和贴出的一样,只是容器中的差别很小,而不是vector vec;
将是std::deque mydeque;
使用for
循环有什么错?你想对组件子集做什么?还有,你想避免循环的原因是什么?我们e std::使用适当的函子进行变换以选择您的元素。@Alexandrevillancourt我存储了大量数据,因此我正在寻找一种快速方法,如,用于找到的
循环解决方案,它需要在向量的长度n
内循环向量,即O(n)
。因为元素访问是O(1),< <代码> > 循环,它的效率是很高的。如果产生的缓存缺失真的是一个瓶颈,考虑不同的方式存储数据,使所有的值<代码> A <代码>都在内存中相邻。如果可读性很重要,并且您希望代码清晰地表达您的意图,请考虑使用<代码> < /COD>环。将组件存储在两个单独的向量中会有帮助吗?那么a
s和b
s在内存中是连续的,因此如果所有操作都在该结构的一个字段上,那么缓存未命中率将减少一半,这对于OP所拥有的大量数据来说是不可忽略的。
std::for_each(vec.begin(), vec.end(),
[] (myStruct &v) {std::cout << v.a << '\n';} );