如何比较和存储 2 个向量的数据元素位置
How to compare and store data elements of 2 vectors position wise?
如何比较 2 个向量的数据元素(逐个索引)并将差分枚举存储在第 3 个向量中。这个set_difference
几乎提供了所有东西,但我想location wise
位置比较数据元素,而不仅仅是通过对它们进行排序。
即std::vector<double> m_vector1
在位置0,1,2,3上分别具有元素(3,7,8,9)4个元素。
std::vector<double> m_vector2
在位置 0、1、2、3 上分别具有元素 (3,5,7,9) 4 个元素。
std::vector<double> m_vector3 (5,7)
当我比较数据时,这个向量应该在位置[0](5) and [1](7)
上存储vector 2
的更改数据。
请注意:如果我使用 set_difference
它只会给我 5,我想要 5 和 7,因为两个位置的数据值都发生了变化。
这是一个利用std::mismatch
为您找到不匹配对的替代方法。您传递与std::mismatch
相同的参数,它会返回适当类型的向量。一些绘制的内容(例如弄清楚类型)可以通过 C++11 和 C++14 严重减少,但该功能适用于 C++03。
template<typename It>
std::vector<typename std::iterator_traits<It>::value_type>
all_mismatches(It first, It last, It first2) {
std::vector<typename std::iterator_traits<It>::value_type> ret;
for (std::pair<It, It> p = std::make_pair(first, first2);
(p = std::mismatch(p.first, last, p.second)).first != last;
++p.first, ++p.second
) {
ret.push_back(*p.second);
}
return ret;
}
在比较double
时需要特别注意的是,如果您不确定它们是否会完全相等,您只需多拿一个Compare
类型参数和函数参数来处理浮点比较并将其直接传递给std::mismatch
。
最后,这假设第一个范围是较短的范围,就像std::mismatch
直到 C++14 一样。如果你愿意,你可以做std::mismatch
现在做的事情,采取两个完整的范围,然后确保你不会超过任何一个范围的终点,或者只是把两个都传递到std::mismatch
,如果你有C++14可用,让它做工作。
您可以将标准算法std::copy_if
与 lambda 表达式一起使用,也可以自己编写相应的循环。
例如
#includde <algorithm>
#include <oterator>
#include <vector>
int main()
P
//...other stuff
std::vector<double>::iterator it1 = m_vector1.begin();
std::copy_if( m_vector2.begin(), m_vector2.end(), std::back_inserter( m_vector3 ),
[&]( double x ) { return ( x != *it1++ ); } );
或
std::vector<double>::iterator it1 = m_vector1.begin();
for ( double x : m_vector2 )
{
if ( x != *it1++ ) m_vector3.push_back( x );
}
- 很好的语法来获取对向量/数组数据的大小引用?
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 如何以"union-like"方式更改C++向量的数据类型
- 在线程函数中处理数据向量时进行线程竞速
- 大家好,当一个类有一个向量作为它的数据成员时,为什么它的大小总是24?
- 初始化可变数据结构中的共享指针向量
- 如何使用模板获取向量中的数据类型?
- 从自定义数据类型向量中删除重复元素
- C++:自定义数据类型向量错误的队列
- 如何将csv中的数据放入c++中的字符串向量中,而绝对没有任何作用
- 如何有效地实现将向量的数据分配给多个变量?
- 如何从多维向量中提取数据
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- C++将 X 向量数据插入到另一个向量
- 返回字符串和不同向量数据类型的映射C++
- constexpr 成员函数,C++中的 std::向量数据成员
- 如何在 C++ 中将结构类型向量数据输入到结构向量成员(嵌套结构向量)中
- 基于向量数据生成字符串
- 与我定义的类的成员有关的c++向量数据类型编译器错误问题