我有一个使用模块的 Fortran 程序,即它.mod在编译期间创建-files。我还写了一个Makefile使用所有.f90-files from src/puts all created .o-files in obj/and the binary in the current folder,一切正常。
我现在在不同的文件夹中重新编译我的程序以进行不同的计算(例如calc1/),即我将其复制Makefile到calc1/,输入make all,calc1/它所做的只是链接,因为目标文件已经存在。但是,如果程序包含任何模块,则编译器需要相应的.mod-files 出现在calc1/. 到现在为止,我重新编译了所有内容 ( make clean all),但是随着程序的增长,这需要太多时间!
我想出的一个可能的解决方案是为二进制文件 ( bin/)设置一个特定文件夹。但这不是一个可行的选择,因为我有工作在队列中,这显然需要一个稳定的二进制文件,同时我也在尝试新功能。
因此,我正在寻找一种以某种方式处理.mod类似于.o-files的-files的解决方案,例如将它们放在obj/.
我在Gnuplot中创建重叠图,因为我混合了法线图和参数图(以及pm3d贴图和参数曲面).除了一件事之外,这种方法效果很好:如果两个图都有标题,则图例通常会重叠.典型示例如下所示:
#legends.gp
set term pngcairo enhanced color linewidth 1.5 dashed dashlength 1.4 rounded
set output "legends.png"
set title "legends test"
set multiplot
# make a box around the legend
set key box
set border 15 lw 1
# fix the margins, this is important to ensure alignment of the plots.
set lmargin at screen 0.15
set rmargin at screen 0.98
set tmargin at screen 0.90
set bmargin at screen 0.15
set xlabel "x"
set ylabel "sin(x)"
set xrange[0:2*pi]
set yrange[-1:1] …Run Code Online (Sandbox Code Playgroud) 在Fortran声明期间使用初始化程序时,是否可以自动扣除字符(字符串)的长度?我想要这样的东西(不按原样运作)
character(*) :: a = 'John Doe'
character(:) :: a = 'John Doe'
Run Code Online (Sandbox Code Playgroud)
示例代码
program char
implicit none
character(8) :: a = 'John Doe' !<-automatically?
write(*,*) a
write(*,*) len(a)
end program char
Run Code Online (Sandbox Code Playgroud)
一种正确的方法是使用
character(8) :: a = 'John Doe'
Run Code Online (Sandbox Code Playgroud)
通过简单地计算字符,但这很容易出错.或者,我可以使角色超过必要的时间并使用trim()
program char
implicit none
character(100) :: a = 'John Doe'
write(*,*) trim(a)
write(*,*) len(trim(a))
end program char
Run Code Online (Sandbox Code Playgroud)
但是可以8自动确定吗?我知道这是一个学术问题,但我仍然想知道......
我有一个大的std::vector<int> a,但我想只在它的一个子集上工作.我们的想法是创建一个std::vector<reference_wrapper<int> > refa只包含所述子集的部分(在mwe中,所有元素1 a<< 4).然后我想传递refa给期望一个std::vector<int>或std::vector<int>&作为参数的函数(因为我也想使用它们a).a可以很大,我想避免多次选择.
问题
如何正确传递refa给函数?我想要的是bar(refa)和foobar(refa)工作.
有没有更好的方法来解决问题,而不改变功能(太多)?
码
#include <functional>
#include <iostream>
#include <vector>
int foo(int &a)
{
a++;
return 0;
}
int bar(std::vector<int> &va)
{
for(auto &vaa : va)
vaa++;
return 0;
}
int foobar(std::vector<int> va)
{
for(auto &vaa : va)
vaa++;
return 0;
}
int main()
{
std::vector<int> a= {1, 2, 3, 4, 5};
std::vector<std::reference_wrapper<int> …Run Code Online (Sandbox Code Playgroud)