我应该如何改变之下,这样的代码Array<Index> array;是足够和SIZE自动从枚举推断?
即使枚举更改,也可以保证它包含SIZE引用正确的大小.
template <typename Enum, int N>
class Array {
public:
int& operator[](Enum index) { return array[index]; }
private:
int array[N];
};
enum Index { X, Y, SIZE };
int main() {
Array<Index, SIZE> array;
array[X] = 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更新:至于"Array <type>意味着你正在创建一个Type对象数组"(Jerry)和"类模板的名称有点误导"(Nawaz):实际上我正在创建CustomSqlQueryModel <TableColumns>.以上只是一个简化的代码,仅此而已.Jerry和Nawaz很严格:这个简化的代码很不幸.
以下 doctest 失败:
import logging
logging.basicConfig(level=logging.DEBUG,format='%(message)s')
def say_hello():
'''
>>> say_hello()
Hello!
'''
logging.info('Hello!')
if __name__ == '__main__':
import doctest
doctest.testmod()
Run Code Online (Sandbox Code Playgroud)
这些页面
似乎暗示logging.StreamHandler(sys.stdout),logger.addHandler(handler)但我的尝试在这方面失败了。(如果不是很明显,我是 python 的新手。)
请帮我修复上面的代码,以便测试通过。
2017 年 6 月 4 日更新:回答00prometheus的评论:当我问这个问题时,接受的使用 doctest 和登录 python 程序的答案似乎不必要地复杂。确实如此,因为这里接受的答案给出了一个更简单的解决方案。在我非常有偏见的意见中,我的问题也比我在原始帖子中已经链接的问题更清楚。
我有一个功能
void X(Object o)
{
....
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我看到,该clang将其签名更改为
void X(Object* o)
Run Code Online (Sandbox Code Playgroud)
这很不方便,因为我直接从一些llvm IR代码中使用这个函数.如何禁止它进行此优化?
编辑:最小的工作示例:
#include <stdio.h>
class Object
{
public:
Object();
~Object();
int* pointer;
};
void Function(Object o)
{
o.pointer = 0;
}
int main()
{
Object a;
Function(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通过以下命令行:
clang++ tst.cpp -emit-llvm -O0 tst.cpp -S -std=c++11
Run Code Online (Sandbox Code Playgroud)
该Function被翻译成:
define void @_Z8Function6Object(%class.Object* %o) nounwind uwtable {
%1 = getelementptr inbounds %class.Object* %o, i32 0, i32 0
store i32* null, i32** %1, align 8
ret void …Run Code Online (Sandbox Code Playgroud) 我做的二进制文件处理,并在我的算法,我想知道实际类型pos_type和off_type计算文件的大小或寻求一个给定的位置(例如当tellg和seekg).
当计算文件的我只是大小static_cast的pos_type一个int64_t,它似乎很好地工作.
怎么样seekg?传递int64_t给它是否安全?
有没有办法制作 pos_type 和 off_type 成为 int64_t,也许使用 traits?
我想消除这个可怕的演员并找到一种符合C++标准的方法.
更新:另见
我一直在研究我们试图解决的问题.我认为这是最好的方法,但请加入你的意见
我们正在尝试计算现实世界驾驶场景中的反应时间,并希望使用移动电话作为数据收集设备.我们想要实现的是在接触到某些提示时驾驶员施加的加速度和更重要的减速度.
我发现这篇论文有很多有用的信息,可以用来加速度计物理
问题是我们很可能没有从0开始的校准时间.但是假设驾驶员从0开始.我们将使用GPS定位来定位车辆,跟踪我们应该计算的时间戳位置数据在提示发生的时间然后使用带时间戳的加速计数据我们应该能够计算他们对提示的反应.
这是我找到解决问题的最佳方法,但是我不确定加速度计数据是否会因无法校准而无法使用,而且振动所见的噪音可能太大而无法使用数据. ..之前有没有人尝试或使用过这些类型的方法?
我正在尝试使用scipy.optimize包来查找我的成本函数的最大值.
在这种特殊情况下:我有一份价格清单,这些价格在一天内变化.为了方便起见,我们假设这一天有8个小时,每小时的价格如下:
price_list = np.array([1,2,6,8,8,5,2,1])
Run Code Online (Sandbox Code Playgroud)
在这个简化的案例中,我想从该price_list中选择4个最高价格.由于种种原因,我不想简单地排序和选择最好的四种价格,而是使用一些优化算法.我有几个约束,因此我决定使用scipy,scipy.optimize.fmin_slsqp中的最小二乘算法.
我首先为我选择的时间创建一个时间表:
schedule_list = np.zeros( len(price_list), dtype=float)
Run Code Online (Sandbox Code Playgroud)
接下来我需要定义我的反向profit_function.对于所有选定的小时,我想总结一下我的利润.虽然我想优化我的日程安排,但price_list是固定的,因此我需要将它放到*args:
def price_func( schedule_list, *price_list ):
return -1.*np.sum( np.dot( schedule_list, price_list ) )
Run Code Online (Sandbox Code Playgroud)
一旦我理解了原则上的工作方式,我就会移动一些东西.这么长时间,我只是避免使用更多*args并使用硬编码的小时数来定义我的约束.我希望我选择的小时数恰好是4,因此我使用了相等约束:
def eqcon(x, *price_list):
return sum( schedule_list ) - 4
Run Code Online (Sandbox Code Playgroud)
此外,我想将我的日程安排值限制为0或1.我不知道如何立即实现这一点,因此我只使用bounds关键字.
带边界的无限制优化工作正常.我只是通过我的schedule_list作为第一个猜测.
scipy.optimize.fmin_slsqp( price_func, schedule_list, args=price_list, bounds=[[0,1]]*len(schedule_list) )
Run Code Online (Sandbox Code Playgroud)
并且输出尽可能好:
Optimization terminated successfully. (Exit mode 0)
Current function value: -33.0
Iterations: 2
Function evaluations: 20
Gradient evaluations: 2
Out[8]: array([ 1., 1., 1., 1., 1., 1., 1., 1.])
Run Code Online (Sandbox Code Playgroud)
没有任何进一步的限制,这是最佳解决方案!
使用以下命令进行约束优化:
scipy.optimize.fmin_slsqp( price_func, schedule_list, args=price_list, bounds=[[0,1]]*len(schedule_list), eqcons=[eqcon, …Run Code Online (Sandbox Code Playgroud) 一个unique_ptr似乎没什么意义的容器:你不能将它与初始化列表一起使用,而我无法遍历容器(下面的解决方法).我误会了什么吗?或者什么时候使用unique_ptr和STL容器有意义?
#include <memory>
#include <vector>
using namespace std;
struct Base { void go() { } virtual ~Base() { } };
// virtual ~Base() = default; gives
// "declared virtual cannot be defaulted in the class body" why?
class Derived : public Base { };
int main() {
//vector<unique_ptr<Base>> v1 = { new Derived, new Derived, new Derived };
//vector<shared_ptr<Base>> v2 = { new Derived, new Derived, new Derived };
vector<Base*> v3 = { new Derived, new …Run Code Online (Sandbox Code Playgroud) 我想得到与下面相同的结果,但没有重复(相同的链接出现两次):
<html>
<body>
<a href="http://www.w3schools.com">http://www.w3schools.com</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
是否可以在没有Javascript的静态HTML中?
有什么好的工具可以解决Linux上的整数程序吗?
我有一个小问题,我想计算以节省时间:D.它是一种子集和问题.我有一个大约20个整数值的列表,我想计算满足一定最小值的最小和的子集.你可以用整数程序来表达这个......就像这样
\sum_{i=1}^{n} w*x -> min
Run Code Online (Sandbox Code Playgroud)
同
\sum_{i=1}^{n} w*x >= c with x \in \{0,1\}
Run Code Online (Sandbox Code Playgroud)
或者还有其他好办法吗?
为什么我们有两种方法来搜索集合中的元素?
另外,find算法可用于查找列表或向量中的元素,但是这些提供成员函数以及成员函数的危害会比通用算法更快吗?
为什么我们需要删除算法并创建关于擦除的所有戏剧删除其中删除只会移动元素然后使用擦除删除实际元素.就像STL列表提供成员函数删除为什么其他容器只能提供删除功能和完成它?