- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好的,我已经记下了这段代码。
包界面
#ifndef BAGINTERFACE_H
#define BAGINTERFACE_H
#include <vector>
#include <algorithm>
template<class ItemType>
class BagInterface
{
public:
virtual int getCurrentSize() const = 0;
virtual bool isEmpty() const = 0;
virtual bool add(const ItemType& newEntry) = 0;
virtual bool remove(const ItemType& anEntry) = 0;
virtual void clear() = 0;
virtual int getFrequencyOf(const ItemType& anEntry) const = 0;
virtual bool contains(const ItemType& anEntry) const = 0;
virtual std::vector<ItemType> toVector() const = 0;
};
#endif /* BAGINTERFACE_H */
包 #ifndef BAG_H #定义 BAG_H
#include "BagInterface.h"
template <class ItemType>
class Bag: public BagInterface<ItemType>
{
public:
int getCurrentSize() const { return v.size(); }
bool isEmpty() const { return v.empty(); }
bool add(const ItemType& newEntry) { v.push_back(newEntry); return true; }
bool remove(const ItemType& anEntry) { std::remove(v.begin(), v.end(), anEntry); return true; }
void clear() { v.clear(); }
int getFrequencyOf(const ItemType& anEntry) const { return std::count(v.begin(), v.end(), anEntry); }
bool contains(const ItemType& anEntry) const { return true; }
std::vector<ItemType> toVector() const { return v; }
private:
std::vector<ItemType> v;
};
#endif /* BAG_H */
和我的实际程序 main.cpp
#include <iostream> // For cout and cin
#include <string> // For string objects
#include "Bag.h" // For ADT bag
using namespace std;
int main()
{
string clubs[] = { "Joker", "Ace", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack",
"Queen", "King" };
// Create our bag to hold cards
Bag<string> grabBag;
Bag<string> dumpBag;
grabBag.add(clubs[1]);
grabBag.add(clubs[2]);
grabBag.add(clubs[4]);
grabBag.add(clubs[8]);
grabBag.add(clubs[10]);
grabBag.add(clubs[12]);
dumpBag.add(clubs[3]);
dumpBag.add(clubs[5]);
dumpBag.add(clubs[7]);
dumpBag.add(clubs[9]);
dumpBag.add(clubs[10]);
dumpBag.add(clubs[12]);
Bag<string> Itersection(Bag<string> bagToCompare){
return grabBag;
}
return 0;
}; // end main
我试图找到两个袋子的交集,这将是一个新袋子,其中包含出现在两个原始袋子中的条目。所以基本上我需要设计和指定一个方法交集,它作为一个新包返回接收方法调用的包和作为方法的一个参数的包的交集。假设 bag1 和 bag2 是包; bag1 包含字符串 a 、 b 和 c ; bag2 包含字符串 b 、 b 、 d 和 e 。表达式 bag1.intersection(bag2) 返回一个只包含字符串 b 的包。
我已经制作了两个包来相互比较,但我不太确定如何设计交集方法。
任何帮助都会很棒。谢谢。
最佳答案
由于枚举包中项目的唯一方法是使用 toVector
,因此您需要迭代其中一个输入包的 toVector
。对于每个项目,在任一输入包中获取该项目的最小频率,并确保输出包包含具有该频率的项目。由于 toVector
可能重复包含相同的项目,您必须检查输出包以查看它是否已经包含您正在考虑的项目。
我还没有跟上 C++11 的速度,所以我将采用老式的方式:
template<class T>
Bag<T> intersection(BagInterface<T> const &a, BagInterface<T> const &b) {
Bag<T> c;
std::vector<T> aItems = a.toVector();
for (int i = 0; i < aItems.size(); ++i) {
T const &item = aItems[i];
int needed = std::min(a.getFrequencyOf(item), b.getFrequencyOf(item));
int lacking = needed - c.getFrequencyOf(item);
for ( ; lacking > 0; --lacking) {
c.add(item);
}
}
return c;
}
关于c++ - 如何找到两个袋子的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841411/
我创建了一个函数来计算两条线段的交点。 不幸的是,如果其中一个段是垂直的,下面的代码将不起作用 public static Point intersection(Segment s1, Seg
我有一个由中心 (x,y,z)、半径和方向矢量定义的圆,该矢量指定圆的朝向。我需要测试这样的圆是否与轴对齐的边界框相交。为了澄清,通过相交,我的意思是如果圆圈描述的区域内的任何点在边界框内,那么就构成
虽然我认为这是一个基本问题,但我似乎无法找到如何在 R 中计算: 2 个或多个正态分布(拟合在直方图上)的交点(我需要 x 值),例如具有以下参数: d=data.frame(mod=c(1,2),m
我看过几个关于找到两个 OBB 之间的交点的线程。我仍然不明白如何找到最小穿透轴。我需要找到最小穿透轴,我相信它在 David Eberly 的论文中也被称为最后一个分离轴,以确定我应该使用表格的哪一
我想使用 intersection()通过 key 或filter()在 Spark 。 但是我真的不知道怎么用intersection()按键。 所以我尝试使用filter() ,但它不起作用。 示
我正在画一个circle在canvas上。我想知道,给定 circle 的半径和原点 x/y ,在什么时候 circle与 canvas 相交(如果有的话)边缘。 这肯定是一个几何问题,但这部分似乎太
我正在尝试计算任意数量平面的最顶部交点,但没有任何乐趣!我正在使用 actionscript,但只需要找到一个我可以实现的算法。 问题: 考虑 3 个垂直轴。 用户为每个三角形/平面输入 3 个点,使
我是一名优秀的程序员,十分优秀!