声称使用标准C++容器作为基类是错误的说法让我感到惊讶.
如果没有滥用语言来宣布......
// Example A
typedef std::vector<double> Rates;
typedef std::vector<double> Charges;
Run Code Online (Sandbox Code Playgroud)
......那么确切地说,宣告的危险是什么......
// Example B
class Rates : public std::vector<double> {
// ...
} ;
class Charges: public std::vector<double> {
// ...
} ;
Run Code Online (Sandbox Code Playgroud)
B的积极优势包括:
A的积极优势包括:
这两种方法都优于使用原始容器,因为如果实现从vector <double>更改为vector <float>,那么只有一个地方可以用B更改,也许只有一个地方可以用A更改(可能更多,因为有人可能在多个地方放置了相同的typedef语句.
我的目标是这是一个具体的,可回答的问题,而不是对更好或更差实践的讨论.显示由于从标准容器派生而可能发生的最糟糕的事情,这可以通过使用typedef来防止.
编辑:
毫无疑问,向类Rate或类Charges添加析构函数会有风险,因为std :: vector不会将其析构函数声明为虚拟.示例中没有析构函数,也不需要析构函数.销毁Rates或Charges对象将调用基类析构函数.这里也不需要多态性.挑战在于使用派生而不是使用typedef来表明发生了一些不好的事情.
编辑:
考虑这个用例:
#include <vector>
#include <iostream>
void kill_it(std::vector<double> *victim) {
// user code, knows nothing of Rates or …Run Code Online (Sandbox Code Playgroud) 我有python代码,包含以下代码.
d = {}
d[(0,0)] = 0
d[(1,2)] = 1
d[(2,1)] = 2
d[(2,3)] = 3
d[(3,2)] = 4
for (i,j) in d:
print d[(i,j)], d[(j,i)]
Run Code Online (Sandbox Code Playgroud)
不幸的是,循环遍历python中的所有键并不足以达到我的目的,我想将此代码转换为C++.什么是用于python字典的最佳C++数据结构,它以元组为键?上述代码的C++等价物是什么?
我查看了boost库中的稀疏矩阵,但是找不到一种只在非零元素上循环的简单方法.