小编fin*_*nnw的帖子

C项目结构 - 每个模块的标题与一个大标题

我在编程生涯中曾经使用过很多C项目,头文件结构通常属于以下两种模式之一:

  1. 一个包含所有函数原型的头文件
  2. 一个.h文件的每个.c文件,包含仅模块中定义的功能的原型.

选项2的优点对我来说显而易见 - 它使得在多个项目之间共享模块更便宜,并使模块之间的依赖关系更容易看到.

但是选项1的优点是什么?它必须具有一些优势,否则就不会那么受欢迎.


这个问题适用于C++和C,但我从未在C++项目中看到#1.

#defines,structs等的放置也各不相同,但对于这个问题,我想关注函数原型.

c coding-style header-files

5
推荐指数
2
解决办法
4798
查看次数

sqlite也可以成为内存数据库吗?

有点困惑,我正在观看一些视频,其中一些人使用sqllite作为内存数据库.从sqllite.org网站看来,它似乎是一个真正的数据库?

它可以是两者还是内存数据库,我看到了别的东西?(与NUnit一起使用).

sql sqlite nunit

5
推荐指数
1
解决办法
316
查看次数

使JTable单元格可编辑 - 但*不*通过双击

我正在尝试JTable使用以下行为向a添加列(类似于Windows资源管理器和类似的shell):

  • 像往常一样,可以单击一次单元格以选择它.
  • 可以双击单元格以执行单独的操作(启动外部程序.)
  • 单元格值(字符串)仍然可以通过单击第二次(暂停后)或按下F2单元格突出显示时进行编辑.

双击不得触发单元格的编辑,但如果可能,我希望保留任何其他默认编辑触发器.

我曾尝试添加一个MouseListener表,并消耗所有MouseEventS,但这并不工作-如果我回到trueisCellEditable()那么我的听众从来没有收到任何点击事件,但如果我回到false然后F2不再起作用.

这可以仅使用事件监听器来实现吗?如果我可以避免它,我宁愿不搞乱PLAF功能.

java swing jtable tablecelleditor

5
推荐指数
1
解决办法
1万
查看次数

在Java中访问shell环境变量

有谁知道如何在Java中访问标准shell环境的环境变量?我正在使用ProcessBuilder类,我必须指定我正在运行的shell脚本中使用的特定环境变量,这些变量存在于标准shell环境中.

访问ProcessBuilder环境不起作用.

java shell environment-variables

5
推荐指数
1
解决办法
9318
查看次数

按升序或降序排序(任意选择;优先选择哪个更便宜)

我有一系列元素.这个数组可能是:

  • 随机洗牌(大约20%的时间)
  • 几乎按升序排序*(大约40%的时间)
  • 几乎按降序排序(大约40%的时间)

但我不知道(提前)这些案件中适用哪一种.我更愿意将数组排序为它已经接近的顺序.

无论输出是升序还是降序都无关紧要,但它必须是一个或另一个(所以我可以对它进行二进制搜索.)

排序不一定稳定.


一些背景信息:过程大致如下:

  • 填充数组
  • 按某些属性A排序
  • 做一些处理(计算分位数,和其他一些小东西)
  • 排序其他一些属性B.
  • 做更多的处理
  • 按属性C排序
  • 做更多的处理

A和B通常彼此相关(但可能是正面的或负面的.)同样适用于B和C.偶尔A == C.

*"几乎排序"在这里意味着大多数元素都接近其最终位置.但很少完全处于最终位置(存在大量的加性噪声​​,并且没有很多长的排序子序列.)但是,在阵列的开始和结束处通常会有一些"异常值",它们是订单的不良预测因子.下一种. 


是否有一种算法可以利用我不喜欢升序与降序的事实,以便更便宜地排序(与我目前正在使用的TimSort相比?)

sorting algorithm

5
推荐指数
1
解决办法
3733
查看次数

给定原点和半径,如何找出p(x,y,z)是否在环面内?

我试图在块游戏中创建一个3D圆环,所以我需要评估一系列坐标,看看它们是否在圆环内.我用球体做的方式是:

shapefunc = function (pos,fields)
  map = {}
  pos.x = math.floor(pos.x+0.5)
  pos.y = math.floor(pos.y+0.5)
  pos.z = math.floor(pos.z+0.5)

  for x=-fields.radius,fields.radius do
    for y=-fields.radius,fields.radius do
      for z=-fields.radius,fields.radius do
        if x*x+y*y+z*z <= fields.radius*fields.radius then
          table.insert(map,{x=pos.x+x,y=pos.y+y,z=pos.z+z})
        end
      end
    end
  end
  return map
end
Run Code Online (Sandbox Code Playgroud)

给定高度(在y轴上),次要和主要半径(在xz轴上)和一个原点,我试过的评估表达式都没有给我任何接近圆环的东西.

3d lua geometry

5
推荐指数
1
解决办法
1075
查看次数

仅通过写一个名字来调用Lua函数(没有括号)

我期待使用像"asdf"这样的变量,而不是编写名称函数来检查它的返回(它会不时变化).这就是为什么"asdf"变量应该在我们每次使用(调用)它时更新它的值

请问在Lua有什么办法吗?

asdf == getFunction() --we define it here

     (...)            --some code 

if asdf < 10 then ... --here we call the variable (so it should get/update again the result of getFunction())
Run Code Online (Sandbox Code Playgroud)

谢谢

variables lua function

5
推荐指数
1
解决办法
1705
查看次数

基于注释的空分析 - 警告仅出现在数组参数中

当使用基于注释的空分析时,我会得到以下(令人困惑的)警告,其中涉及一个数组:

Null type safety (type annotations): The expression of type 'int[]' needs unchecked conversion to conform to 'int @Nullable[]'

当我将未注释int[]int @Nullable[]参数传递给参数时会发生这种情况.

这是令人惊讶的.通常只有一个问题,如果你取一个可空的值并尝试将它传递给一个非空参数,但我正在做相反的事情 - 采用一个已知的非null(虽然没有注释)数组并将其传递给一个方法(Arrays.equals)确实接受空值.

此外,它似乎不是非数组对象的问题.通常,T可以将(未注释的,非数组)类型的变量或返回分配给a @Nullable T.

所以我的问题是为什么在T数组类型时这会改变


我的类是一个可清除/可比较的代理,用于使用int[](取自C++函数)作为唯一标识符的本机类.我的包使用基于注释的空分析,而第三方包(使用本机类)则不使用.

这是一个显示问题的简化版本:

TagKey.java:

package example;

import java.util.Arrays;

import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;

import other.Tag;

import com.google.common.collect.Interner;
import com.google.common.collect.Interners;

public class TagKey {

    private TagKey(Tag tag) {
        this.tag = tag;
    }

    public static TagKey forTag(Tag tag) {
        TagKey candidateKey …
Run Code Online (Sandbox Code Playgroud)

java eclipse annotations nullable eclipse-jdt

5
推荐指数
1
解决办法
471
查看次数

为什么Google Collections中没有SortedMultiset?

Google Collections包含Multiset界面和TreeMultiset类,但我很惊讶地发现没有相应的SortedMultiset界面.

这样的东西对于建立离散概率分布非常有用.

在我尝试自己实现它之前,我想知道是否有一个特定的理由将其遗漏,例如可能违反MultisetCollection不变,或固有的性能问题等.


编辑:我最初没有意识到这一点,但这实际上是3个单独的请求:

  1. 更改一个方法的返回类型(TreeMultiset.entrySet)
  2. 一个匹配现有功能的新界面 TreeMultiset
  3. 一对新方法,用于对树的分支中的计数求和

java guava

4
推荐指数
1
解决办法
863
查看次数

为什么int a [5] = {0}和int a [5] = {1}之间的区别(缺失特征)

当我们初始化这样的数组时int a[5] = {0},编译器会使所有5个元素为0.这是非常好的,紧凑的初始化和有用的功能.

但我想知道为什么编译器没有int a[5]={1}类似的初始化?为什么它不能使所有5个元素1?为什么标准不强制要求?它不是一个很棒的功能吗?不是不见了?

此外,如果初始化程序中的元素数小于数组的大小,则编译可以使用初始化程序中的最后一个元素初始化剩余的元素.手段,int a[5]={1,2,3}相当于int a[5]={1,2,3,3,3}.同样,int a[10]={1,2,3,0}相当于int a[10]={1,2,3,0,0,0,0,0,0,0};.

如果标准要求,这一切都不是一个很棒的功能吗?或者这个缺失的功能有什么好的理由吗?


并且在C99中有一个称为指定初始化程序的东西,其用途如下:

指定的初始值设定项可以与常规初始值设定项结合使用,如下例所示:

int a[10] = {2, 4, [8]=9, 10}

在该示例中,a [0]被初始化为2,a 1被初始化为4,a [2]至a [7]被初始化为0,并且a [9]被初始化为10.

很有趣.但即便是这个功能也不在C++中.

c++ arrays language-features language-design array-initialization

4
推荐指数
1
解决办法
6183
查看次数