C++ 在C++;有没有办法应用函数';同时';向量的所有元素?
我有一个长度为6的向量,元素为1或0。我想在每个第I个元素两侧的2个元素上应用“XOR”。e、 对于i=1,我将对第0个和第2个元素应用xor。然后将第i个元素替换为该xor输出。我想对原始向量上的所有这样的“I”同时应用xor。有没有办法不用另一个向量就能做到这一点?当你说“同时”时,你的意思是一个异或运算不应该使用前一个异或运算的中间数据,而是使用原始向量的数据,对吗?在这种情况下,由于每个步骤都会删除信息(元素C++ 在C++;有没有办法应用函数';同时';向量的所有元素?,c++,vector,stl,C++,Vector,Stl,我有一个长度为6的向量,元素为1或0。我想在每个第I个元素两侧的2个元素上应用“XOR”。e、 对于i=1,我将对第0个和第2个元素应用xor。然后将第i个元素替换为该xor输出。我想对原始向量上的所有这样的“I”同时应用xor。有没有办法不用另一个向量就能做到这一点?当你说“同时”时,你的意思是一个异或运算不应该使用前一个异或运算的中间数据,而是使用原始向量的数据,对吗?在这种情况下,由于每个步骤都会删除信息(元素i的前一个状态会被结果覆盖),因此,如果没有至少一些中间存储,就无法执行此操作。
i
的前一个状态会被结果覆盖),因此,如果没有至少一些中间存储,就无法执行此操作。但是,您只删除了一位信息,并且该信息仅在下一步中需要,因此您不需要完整的附加向量。当您说“同时”,您的意思是一个异或操作不应使用前一个异或操作的中间数据,而应使用原始向量的数据,对吗?在这种情况下,由于每个步骤都会删除信息(元素i
的前一个状态会被结果覆盖),因此,如果没有至少一些中间存储,就无法执行此操作。但是,您只删除了一位信息,并且该信息仅在下一步中需要,因此不需要完整的附加向量。使用临时变量存储上一项:
bool prev = vec[0];
for(int i = 1; i < vec.size() - 1; i++){
bool result = vec[i + 1] ^ prev;
prev = vec[i];
vec[i] = result;
}
bool-prev=vec[0];
对于(int i=1;i
使用临时变量存储上一项:
bool prev = vec[0];
for(int i = 1; i < vec.size() - 1; i++){
bool result = vec[i + 1] ^ prev;
prev = vec[i];
vec[i] = result;
}
bool-prev=vec[0];
对于(int i=1;i
奇怪的需求,只需使用另一个向量。奇怪的需求,只需使用另一个向量。这就解决了问题,除了两件事:大小是6,所以我要断言(vec.size()=6)
。如果您想让它更通用于其他大小,您至少必须确保向量在读取其第一个元素之前不是空的。不管怎么说,虽然这段代码看起来不错,但我倾向于不做其他人的家庭作业@UlrichEckhardt你是对的,但我认为看到一个示例代码可以很好地理解概念谢谢Nima!现在看起来很简单。我应该多搔搔头。这就解决了问题,除了两件事:大小是6,所以我要断言(vec.size()==6)。如果您想让它更通用于其他大小,您至少必须确保向量在读取其第一个元素之前不是空的。不管怎么说,虽然这段代码看起来不错,但我倾向于不做其他人的家庭作业@UlrichEckhardt你是对的,但我认为看到一个示例代码可以很好地理解概念谢谢Nima!现在看起来很简单。我应该多搔搔头。是的,你说得对。我知道需要中间存储,但当然,使用大小为“int”的存储比使用6个整数的完整向量(在这个问题中)更有效。是的,你做对了。我知道需要中间存储,但当然,具有大小为“int”的存储比具有6个整数的完整向量(在这个问题中)更有效。