最重要的是,为什么迭代器会导致分段错误?注意,我在这里键入代码的相关部分而不是复制粘贴.如果编译中有错误,请注意,但不要将其视为我的问题的来源.
在我的代码中,我有一个珠子盒子的地图:
map<vector<int>,set<shared_ptr<bead> > > > nextBoxes;
除此之外,每个珠子还具有一个vec pos构件,该构件又具有:
class vec{
double x;
double y;
double z;
.
.
.
vector<int> getBox();
.
.
.
}
vector<int> vec::getBox(){
vector<int> out(3,0);
extern double boxSize;
out[0] = x/boxSize;
out[1] = y/boxSize;
out[2] = z/boxSize;
return out;
}
Run Code Online (Sandbox Code Playgroud)
我用一种非常简单的方法将珠子穿过盒子
extern vectrot<shared_ptr<bead> > beads;
for (int i = 0; i < beads.size(); i++){
vector<int> t = beads[i]->pos.getBox();
nextBoxes[t].insert(beads[i]);
}
Run Code Online (Sandbox Code Playgroud)
在代码的其他地方,pos珠子的值可能会改变,我会在本地更新盒子.
我使用以下循环来浏览盒子和珠子:
map<vector<int>,set<shared_ptr<bead> > >::iterator mit = nextBoxes.begin();
extarn …Run Code Online (Sandbox Code Playgroud) 有时,文件扩展名不提供指向imgur的链接.例如:http://imgur.com/rqCqA.我想下载文件并给它一个已知名称或在更大的代码中获取它的名字.问题是我不知道文件类型,所以我不知道给它的扩展名.
我怎么能在python或bash中实现这一点?
我正在运行一个模拟,需要一些时间来运行,我想改进它.根据我的理解,将值传递给函数意味着复制的值很慢.有没有办法在一个专用文件中包含一些函数,我不需要复制值?
我不介意做"错误的编程"(全局变量,公共访问等)以获得速度.
谢谢
编辑:当我开始我的项目时,我测试了几个循环.我计算了这种循环的开始和结束之间的处理器风格:
int i = 0;
while (i < 10000000){
i = doStuff(i); //or doStuff();
}
int doStuff(i){
return i++;
}
int doStuff(){
return i++;
}
Run Code Online (Sandbox Code Playgroud)
我很确定doStuff()案例的速度要快10倍.我已将我以前的代码更改为全局变量和直接访问("错误的编程"),它显着改善了我的运行时间.我试图使用引用,但我有一些固有的问题阻止我这样做(我不记得它是什么).无论如何,我现在正在玩gprof.
我在python中创建了一个简单的函数:
def func(a,x):
return a+x*2
Run Code Online (Sandbox Code Playgroud)
然后我称之为
x = [log(1),log(2),log(4),log(5),log(8)]
#Import y data from a file
free= curve_fit(func,np.array(x),np.array(y))[0][0]
yline = func(free,x)
Run Code Online (Sandbox Code Playgroud)
结果yline是两倍长,x并且每个元素在那里两次.
为什么会这样?
注意: 我正在导入numpy但不是scipy或curve_fit
我正在通过Project Euler编程,我遇到了一个奇怪的问题.我想找到从两个自然数生成(自然)数字的所有可能方法.我创建了一个简单的循环,我注意到了奇怪的结果.例如,1从3和1生成.一些调查结果如下:
#Importing stuff I often use in my solutions/tests
from math import sqrt, log, floor, pow, fabs, factorial
from sets import Set
from random import randint
from itertools import permutations
import sys
dub = dict()
c = 0 #Counting the number of elements in dub[18], use to track changes
for i in range (1,10):
if 18 in dub: #setting c = len(dub[18])
c = len(dub[18])
for j in range (i+1,10):
pair = [[i,j]]
v = i+j
if …Run Code Online (Sandbox Code Playgroud) 我有一个FORTRAN代码,我需要在服务器上运行.我注意到两台机器的结果有点不同.调查一下,我了解到差异从一个返回real值的函数变为一个double precision变量.在locale机器上我使用旧编译器(gnu f95 4.1.2),在远程机器上我使用ifort.