我正在尝试打印我正在制作的游戏中玩家的动作历史.在每轮结束时,每个玩家都在正方向或负方向上移动了一些数量,并将其记录为运动矢量中的int.最终我想要为每个玩家绘制移动方向与时间的关系,但是我无法从2d向量中提取数据.
所以我尝试的第一件事就是迭代并打印所有元素,但是这不能编译:
void output_movement(const std::vector< std::vector<int> > & movement){
std::vector< std::vector<int> >::iterator row;
std::vector<int>::iterator col;
for (row = movement.begin(); row != movement.end(); ++row) {
for (col = row->begin(); col != row->end(); ++col) {
std::cout << **col;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器提供此错误消息,我不太明白:
hg_competition.cpp:45: error: no match for ‘operator=’ in ‘row = ((const std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >*)money_movement)->std::vector<_Tp, _Alloc>::begin [with _Tp = std::vector<int, std::allocator<int> >, _Alloc = std::allocator<std::vector<int, std::allocator<int> > >]()’
/usr/include/c++/4.4/bits/stl_iterator.h:669: note: candidates are: __gnu_cxx::__normal_iterator<std::vector<int, std::allocator<int> >*, std::vector<std::vector<int, std::allocator<int> …Run Code Online (Sandbox Code Playgroud) 我希望在我参与的运营研究项目中添加一些遗传算法.目前我们有一个程序可以帮助优化一些调度,我们希望以遗传算法的形式添加一些启发式算法.在c ++中是否有用于通用遗传编程/算法的好库?或者你会建议我自己编码吗?
我应该补充一点,虽然我不熟悉c ++,但我在c ++中进行这种数学优化工作还是比较新的,因为我以前合作的小组倾向于使用专有的优化包.
我们有一个相当计算密集的适应度函数来评估,我们有一个集群来运行它,所以非常需要并行代码.
那么c ++是一个很好的语言吗?如果没有,请推荐一些其他的,因为我愿意学习另一种语言,如果它让生活更轻松.
谢谢!
现在新的c ++ 11标准已经改变了序列点的描述方式,我试图找出c ++ 03和c ++ 11之间的确切变化.
特别是,在任何情况下,看起来相同的代码在c ++ 11中都会有一个序列点而不是c ++ 03吗?
这个问题跟进在Python中创建命名空间包的方法以及如何在Python中创建命名空间包?.
您不能在命名空间包中包含任何其他代码和数据
__init__.py.尽管它可能在开发期间或项目作为.egg文件安装时起作用,但在使用"系统"打包工具安装项目时它将无法工作 - 在这种情况下,__init__.py文件将不会被安装,更不用说执行了.
这似乎使得无法拥有一个带有独立分布式扩展子包的"主库"包.我想要的是能够:
定义一个核心库包,使用如下:
import mylibrary
mylibrary.some_function()
Run Code Online (Sandbox Code Playgroud)允许库扩展,单独打包和分发,使用如下:
import mylibrary.myextension
mylibrary.myextension.some_other_function()
Run Code Online (Sandbox Code Playgroud)我希望能够使用命名空间包来实现这一点,但基于上面的问题和链接,似乎并非如此.这可以完成吗?
我正在尝试使用makefile来编译其他人编写的程序,使用cygwin.我收到很多错误信息,其中很多都抱怨error: template with C linkage.
在搜索了一下后,似乎问题与之相关extern "C".该行包含在文件cygwin/usr/include/pthread.h中,该文件包含#include < pthread.h >在其中一个标题中.当我删除此行时,大多数错误消息都会消失.但是还有一些,有以下几种:
/usr/include/pthread.h:67:5: error: previous declaration of ‘int pthread_atfork(void (* )(),void ( *)(), void ( *)())’ with ‘C++’ linkage
/usr/include/sys/unistd.h:136:5: error: conflicts with new declaration with ‘C’ linkage
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这一问题?我很乐意坐下来详细了解所有这些东西,但我没有时间需要这个程序运行..
我目前正在移植一些Windows代码,并尝试将其用于Ubuntu.该项目最初是用VC++编译的,没有任何问题.另外我应该注意,这只需要在Ubuntu中工作,但更多平台独立的想法当然是受欢迎的.
大多数代码都易于移植,因为它主要是一个几乎没有OS特定部分的数值模拟项目.在移植版本中没有使用UNICODE,也没有任何需要支持它.
我想知道在尝试使用GCC编译此代码时的最佳实践,特别是:
什么被认为是最好的替代品:__ int64,_tmain和_TCHAR*?
谢谢!
我想知道你想要使用相同基础包的子项目的正确/最简单/最pythonic方式.我们目前有这样的文件结构:
trunk\
proj1\setup.py
company_name\__init__.py + proj1's code
proj2\setup.py
company_name\__init__.py + proj2's code
Run Code Online (Sandbox Code Playgroud)
我们希望保持命名空间company_name对我们所有的项目都是通用的(也许这本身就是unpythonic?)但是当proj1和proj2安装在开发模式下时,第一个安装会被破坏.它看起来import company_name...很困惑在哪个company_name包中查找它并抓取第一个/最后一个/随机一个.
通常如何在更大的python项目中处理?是否可以通过构建某种巨型蛋的主干中的setup.py来解决这个问题?我没有在谷歌或堆栈上找到任何相关信息,所以任何信息甚至只是链接非常感谢!
编辑:我刚尝试在根文件夹中添加setup.py
...
namespace_packages = ['company_name'],
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']}
...
Run Code Online (Sandbox Code Playgroud)
适当pkg_resources.declare_namespace(__name__)的__init_.py文件,但./setup.py bdist_egg 只是给出:
company_name setup命令中的错误:分发包含名称空间包'company_name'的模块或包
目前我正在尝试生成组合,我使用以下代码:
#include <vector>
#include <algorithm>
#include <iostream>
#include <functional>
template<class RandIt, class Compare>
bool next_combination(RandIt first, RandIt mid, RandIt last)
{
std::sort(mid, last, std::bind(std::less<int>(), std::placeholders::_2
, std::placeholders::_1));
return std::next_permutation(first, last, std::less<int>());
}
Run Code Online (Sandbox Code Playgroud)
使用g ++无法编译说:
next_combo.cpp: In function ‘bool next_combination(RandIt, RandIt, RandIt)’:
next_combo.cpp:10: error: ‘bind’ is not a member of ‘std’
next_combo.cpp:10: error: ‘std::placeholders’ has not been declared
next_combo.cpp:11: error: ‘std::placeholders’ has not been declared
Run Code Online (Sandbox Code Playgroud)
我认为std :: placeholders是在功能上声明的,但现在我很困惑.我应该只使用提升吗?
该项目的其余部分也使用c ++ 0x,那么有更好的方法使用c ++ 0x功能编写它吗?
任何帮助是极大的赞赏 :)
我有这个类为montecarlo模拟器创建一个路径,它从一个可用的int数组创建整数路径.因此,例如,我们可以有从含有数组{0,1,2,3,4}拉伸长度为3的路径,这将例如生成3,1,2和1,4,0.
//This path generator just generates a list of ints for each path
template< typename randgen >
class MCPathGen {
public:
typedef vector< int > mcpath_t;
typedef randgen randgen_t;
typedef typename add_lvalue_reference<randgen>::type randgen_ref_t;
MCPathGend(randgen_ref_t r) : m_rgen(r) {}
//generate a single path by shuffling a copy of blank_d
mcpath_t operator()() {
Chooser< randgen_t > choose(m_rgen);
mcpath_t path_temp(blank_d.begin(), blank_d.end());
random_shuffle(path_temp.begin(), path_temp.end(), choose);
return path_temp;
};
private:
randgen_ref_t m_rgen;
};
Run Code Online (Sandbox Code Playgroud)
现在我不太确定我的同事使用了什么 typedef typename add_lvalue_reference<randgen>::type randgen_ref_t;
add_lvalue_reference有什么作用?这对于使代码有效是必要的吗?
我以前没见过,所以任何见解都值得赞赏!
我想知道如何修改字节码,然后重新编译该代码,以便我可以在python中使用它作为一个函数?我一直在努力:
a = """
def fact():
a = 8
a = 0
"""
c = compile(a, '<string>', 'exec')
w = c.co_consts[0].co_code
dis(w)
Run Code Online (Sandbox Code Playgroud)
反编译为:
0 LOAD_CONST 1 (1)
3 STORE_FAST 1 (1)
6 LOAD_CONST 2 (2)
9 STORE_FAST 1 (1)
12 LOAD_CONST 0 (0)
15 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
假设我想摆脱第0和第3行,我打电话给:
x = c.co_consts[0].co_code[6:16]
dis(x)
Run Code Online (Sandbox Code Playgroud)
这导致:
0 LOAD_CONST 2 (2)
3 STORE_FAST 1 (1)
6 LOAD_CONST 0 (0)
9 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
我的问题是如何处理x,如果我尝试exec x我得到一个'没有nullbytes的预期字符串,我得到相同的exec w,尝试编译x结果:compile()期望字符串没有空字节.
我不知道最好的方法是什么,除了我可能需要创建某种代码对象,但我不知道如何,但我认为它必须是可能的字节游戏,python汇编程序等
我正在使用python 2.7.10,但如果可能的话,我希望将来兼容(例如python 3).