小编fuj*_*uji的帖子

使用std :: experimental :: optional来实现列表

我想知道是否可以使用实现单个(和可能的双重)链表std::experimental::optional.

template <typename T>
struct node {
    std::experimental::optional<node<T>> next;
    T data;
};
Run Code Online (Sandbox Code Playgroud)

这种设计有哪些优点/缺点?可以使用新c++1z功能来实现哨兵,还是完全摆脱它们?这会扩大到n-ary树吗?

c++ list data-structures c++14

16
推荐指数
2
解决办法
1018
查看次数

cmake clang-tidy(或其他脚本)作为自定义目标

我正在尝试为clang-tidy创建一个自定义cmake目标,以便对我的项目进行lint.源文件夹看起来像这样:

src/scripts/run-clang-tidy.py
src/.clang-tidy
src/...
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的计划是使用自定义命令将这两个文件复制到构建目录:

add_custom_command(
    OUTPUT run-clang-tidy.py .clang-tidy
    COMMAND cp ${CMAKE_SOURCE_DIR}/scripts/run-clang-tidy.py ${CMAKE_SOURCE_DIR}/.clang-tidy ${CMAKE_CURRENT_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)

我现在想要run-clang-tidy.py在构建目录(应该是工作目录)中调用自定义目标,以便我可以调用:

make lint
Run Code Online (Sandbox Code Playgroud)

哪个应该运行指定的检查.clang-tidy.

要使此脚本起作用,它还需要该CMAKE_EXPORT_COMPILE_COMMANDS选项.我尝试使用以下命令设置它,但它无法识别它:

add_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)
Run Code Online (Sandbox Code Playgroud)

电话add_custom_target怎么样?

lint cmake clang target clang-tidy

13
推荐指数
3
解决办法
9402
查看次数

将命令式for循环转换为惯用的haskell

将命令式算法转换为函数式风格我遇到了一些困难.我无法理解的主要概念是如何根据序列中的位置填充序列值.在Haskell中,以下算法的惯用解决方案如何?

A = unsigned char[256]
idx <- 1
for(i = 0 to 255)
    if (some_condition(i))
        A[i] <- idx
        idx++
    else
        A[i] = 0;
Run Code Online (Sandbox Code Playgroud)

该算法基本上为直方图的映射函数创建查找表.

你知道哪些资源可以帮助我更好地理解这类问题吗?

algorithm haskell functional-programming imperative

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

如何通过QByteArray在JSON中存储QPixmap?

我有一个QByteArray,我想用Qt保存在JSON文件中,也可以再次读取它.由于JSON原生无法存储原始数据,我认为最好的方法可能是字符串?目标是以这种方式保存QPixmap:

{
  "format" : "jpg",
  "data" : "...jibberish..."
}
Run Code Online (Sandbox Code Playgroud)

我如何实现这一点以及如何再次从这个JSON对象中读取(我使用的是Qt5)?我现在拥有的是这样的:

QPixmap p;
...

QByteArray ba;
QBuffer buffer(&ba);

buffer.open(QIODevice::WriteOnly);
p.save(&buffer, "jpg");

QJsonObject json;
gameObject["data"] = QString(buffer.data());

QJsonDocument doc(json);
file.write(doc.toJson());
Run Code Online (Sandbox Code Playgroud)

但由此产生的"乱码"是缩短包含整个图像的方法.

qt json bytearray qt5

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

用C++建模任意树(带迭代器)

我正在寻找一种方法来建模一个树,每个节点有一个任意数量的子节点.

这个答案建议使用Boost Graph Library来完成这项任务:

什么是一个好的和稳定的C++树实现?

我需要执行的主要操作是树的遍历函数(preorder,children,leafs)及其子树.我还需要从孩子们那里收集数据的功能.

BGL是否是正确的选择,如何实现一个简单树的前序遍历?在文档中,我只能找到常规图表的信息.

编辑:我也知道tree.hh图书馆,但它的许可似乎并不适合所有人.

c++ tree boost graph tree-traversal

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

c ++排序范围视图 - 如何创建const_iterator?

我正在尝试编写一个类,它应该作为一些基础元素序列的排序视图.到目前为止,我已经提出了非const版本.现在我在调整它以提供const_iterator功能方面遇到了问题.

到目前为止我的代码看起来像这样:

// forward declare iterator
template <class InputIt>
class sorted_range_iter;

template <class InputIt>
class sorted_range {
    friend class sorted_range_iter<InputIt>;

  private:
    using T = typename InputIt::value_type;
    InputIt _first;
    InputIt _last;
    std::vector<size_t> _indices;

  public:
    using iterator = sorted_range_iter<InputIt>;

    sorted_range() = default;
    sorted_range(InputIt first, InputIt last)
        : _first(first), _last(last), _indices(std::distance(_first, _last)) {
        std::iota(_indices.begin(), _indices.end(), 0);
    };

    template <class Compare = std::less<T>>
    void sort(Compare comp = Compare()) {
        std::sort(_indices.begin(), _indices.end(),
                  [this, &comp](size_t i1, size_t i2) {
                      return comp(*(_first + …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl const-iterator c++14

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

如何创建一个包含更高维度的代数矩阵的结构?

我想创建一个struct包含nalgebra::MatrixN这是U1更大的:

extern crate nalgebra as na;

use na::{DimName, DimNameAdd, DimNameSum, MatrixN, U1};

pub struct Homogenous<D: DimName>
where
    D: DimNameAdd<U1>,
{
    mat: na::MatrixN<f32, DimNameSum<D, U1>>,
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

extern crate nalgebra as na;

use na::{DimName, DimNameAdd, DimNameSum, MatrixN, U1};

pub struct Homogenous<D: DimName>
where
    D: DimNameAdd<U1>,
{
    mat: na::MatrixN<f32, DimNameSum<D, U1>>,
}
Run Code Online (Sandbox Code Playgroud)

尝试遵循错误消息会导致出现下一个特征错误消息的兔子洞。我看过 nalgebra 的 API,里面没有这么复杂的 trait 链。例如to_homogenous方法。我不确定我的方法是否正确。

Dim有相应的特征DimAddand DimSum,但是由于该部分nalgebra没有真正记录下来,

我不知道我是否走在正确的道路上——或者我想做的事情是否可能。

generics rust

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

在Haskell中绘制彩色四边形与gpipe

我正在尝试使用gpipe包在Haskell的屏幕上随机位置绘制四边形.由于四边形将位于2D中,我还想设置正交投影.我怎么似乎没有得到光栅化的类型.这是我的代码(使用gpipe教程拼凑在一起):

{-# LANGUAGE ScopedTypeVariables, PackageImports, FlexibleContexts, TypeFamilies #-}
module Main where

import Graphics.GPipe
import qualified "GPipe-GLFW" Graphics.GPipe.Context.GLFW as GLFW
import Control.Monad (unless)

import System.Random

-- Generate random points in 2d
getRandomPoints2D :: (Float, Float) -> StdGen -> [V4 Float]
getRandomPoints2D range sg = zipWith createPoint x y
    where createPoint x y = V4 x y 0 1
          (sg1, sg2) = split sg
          x = randomRs range sg1
          y = randomRs range sg2

getPoints :: Int -> StdGen -> …
Run Code Online (Sandbox Code Playgroud)

opengl shader haskell vbo

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

std ::将自定义树转换为新树

我有一个像数据结构一样的树定义为:

template<typename T>
struct node {
  T val;
  node<T>* parent;
  unique_ptr<node<T>> next_sibling;
  unique_ptr<node<T>> first_child;
};

template<typename T>
struct tree {
    ...
  private:
    unique_ptr<node<T> _head;
};
Run Code Online (Sandbox Code Playgroud)

我还为树类定义了几个迭代器(preorder,inorder ...).

使用std::transform给定的树的作品:

tree<int> t;
...
std::transform(t.begin(), t.end(), t.begin(), [](){});
Run Code Online (Sandbox Code Playgroud)

但是我知道想要有类似于a的东西back_inserter来构建具有相同层次结构的新树:

tree<int> t_n;
std::transform(t.begin(), t.end(), my_inserter(t_n));
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

c++ iterator stl c++11 c++14

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

在c ++ 11中的类中的不同方法之间共享random_number_engine

我有一个类,需要在几个不同的成员方法中随机数.我正在使用C++11,我认为在每种方法中新建一个随机数生成器是不可行的.

是否可以通过使其成为类的成员属性或类型def来共享整个类中的随机数生成器,同时仍然确保良好的随机性

我怎么能这样做,也许你可以给我一个小例子?我应该在哪里设置随机引擎的种子,我想使用Mersenne twister具有不同类型分布(normal&uniform)的引擎.

c++ random distribution c++11

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