【发布时间】:2018-04-27 09:00:28
【问题描述】:
我正在尝试比较两个大小为 4 的倍数的向量,并且数据以块(4 个元素)表示。每个向量块都有一个唯一的编号,例如 {0,0,0,0}, {0,0,0,1}, {0,0,0,2} 或 {0,0,0,0,0, 0,0,1,0,0,0,2} 和 {0,0,0,2,0,0,0,1} 等等。我正在使用每次递增 i+=4 的迭代器。我写了一个小函数来完成这项工作,但块往往会重复。我不确定如何 t0 删除这些块的重复。例如 vector_A {0,0,0,0,0,0,0,1} vector_B {0,0,0,1,0,0,0,0,0,0,0,2} 它应该给出 local_vector1 { 0,0,0,2} 而不是我得到本地 vector_1 {0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,2}
void comparing_vectors_by_block(std::vector<int> vector_A, std::vector<int>
vector_B)
{
const int blockSize = 4;
std::vector<int> local_vector1;
std::cout << "size of the vector_A: " << vector_A.size() << std::endl;
std::cout << "size of the vector_B: " << vector_B.size() << std::endl;
for (auto it_A = std::begin(vector_A); it_A != std::end(vector_A); it_A+=4)
{
for (auto it_B = std::begin(vector_B); it_B != std::end(vector_B); it_B += 4)
{
bool match = equal(it_A, it_A + blockSize, it_B, it_B + blockSize);
if (!match)
{
std::cout << "match :" << std::endl;
local_vector1.insert(local_vector1.end(), it_B, it_B + blockSize);
}
else
{
std::cout << "not matched :" << std::endl;
}
}
}
【问题讨论】:
-
如果你有一个“块”向量,为什么不将它制作一个实际的“块”向量,就像一个数组向量(例如
std::vector<std::array<int, 4>>)?然后比较就变成了普通的==比较运算符。 -
为什么不匹配就输出“match:”,匹配就输出“not match”?
-
我不确定数组向量是如何工作的。我会看一看。这似乎是一个合理的解决方案。
-
匹配和不匹配只是为了调试。请忽略。
标签: c++ algorithm vector stl-algorithm