小编kar*_*ten的帖子

非常频繁地调用std :: nth_element()函数

我没有在任何地方找到这个特定主题......

我在23个整数的std :: vector中的不同数据上调用nth_element()算法,每秒大约400,000次,更精确的"无符号短"值.

我想提高计算速度,这个特定的调用需要很大一部分CPU时间.现在我注意到,与std :: sort()一样,即使具有最高优化级别和NDEBUG模式(Linux Clang编译器),nth_element函数在探查器中也是可见的,因此比较是内联的而不是函数调用本身.好吧,更多的preise:不是nth_element()但是std :: __ introselect()是可见的.

由于数据的大小很小,我尝试使用二次排序函数PIKSORT,当数据大小小于20个元素时,它通常比调用std :: sort更快,可能是因为函数将是内联的.

template <class CONTAINER>
inline void piksort(CONTAINER& arr)  // indeed this is "insertion sort"
{
    typename CONTAINER::value_type a;

    const int n = (int)arr.size();
    for (int j = 1; j<n; ++j) {
        a = arr[j];
        int i = j;
        while (i > 0 && a < arr[i - 1]) {
            arr[i] = arr[i - 1];
            i--;
        }
        arr[i] = a;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这比在这种情况下使用nth_element慢.

此外,使用统计方法是不合适的,比std :: nth_element更快

最后,由于值在0到约20000的范围内,因此直方图方法看起来不合适. …

c++ sorting performance inline nth-element

15
推荐指数
3
解决办法
1106
查看次数

检查文本文件中列表中的文件是否存在(Linux)?

使用 UNIX/Linux,一个简单的解决方案是:

for i in $(< mylist.txt ); do
  if [ ! -r $i ] ; then
    echo "file missing!  $i"
    exit 1
  fi
done
Run Code Online (Sandbox Code Playgroud)

但是,如果每行仅指定一个文件,但文件名可能包含空格,则会中断。文件名中的空格在用户中很受欢迎,但在程序员中却不受欢迎,这是有原因的。我尝试添加引号,但这不起作用:在 for 命令中,空格被用作分隔符。

我怎样才能以简单的方式解决这个问题?

linux bash

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

标签 统计

bash ×1

c++ ×1

inline ×1

linux ×1

nth-element ×1

performance ×1

sorting ×1