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';} );