小编ora*_*001的帖子

用于随机选择std :: vector的所有元素的有效方法,无需重新洗牌

我正在寻找一种有效的方法来选择对std::vector<T>随机顺序中a的每个元素的访问,而不需要重新洗牌或复制它们,即不使用std::random_shuffle并确保每个元素只被选择一次.

我不想复制或重新洗牌,因为a)每个实例T都可能是一个非常大的对象,b)对于我将对矢量元素进行的其他操作,它们更容易保持相同订购.

此外,我真的不想走在不断挑选和拒绝重复的街道上.很可能我会在向量中存储大量这些大对象,效率很关键,因为我希望每秒多次调用这种随机选择方法.

c++ random vector std

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

c ++:根据预定义的元素索引选择std :: vector的子集

我正在寻找一种有效的方法来修剪或复制现有std :: vector的子集.符合子集/保留条件的元素的标准是它们的索引包含在单独的预定义std :: vector中.

e.g std::vector<String> Test = { "A", "B", "C", "D", "E"}

std::vector<int> SelectionV = {1,2,5}

Result = {"A", "B", "E"}
Run Code Online (Sandbox Code Playgroud)

我将在一个非常大的向量上执行此操作,并且可能定期执行此操作,因此我正在寻找尽可能有效的方法.

我也在考虑另一种选择,但又不确定一种有效的方法是......

当对象Test被填充时(在我的情况下它是第三方定义的对象),它是使用迭代器进行单次传递的结果(不能直接访问元素).我想知道是否可以只添加出现在SelectionV中定义的计数中的Test向量元素

例如

int count = 0

for (Iterator.begin, Iterator.end(), Iterator++) {
    if (count is a number contained in selectionV)
        add to Test
}
Run Code Online (Sandbox Code Playgroud)

但我认为这会导致每次迭代都会通过selectionV,这比简单地添加所有元素并稍后选择子集要低得多.

任何帮助非常感谢.

c++ performance sample vector subset

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

C++反向运动学算法/库,包括当链中的几个节点的位置已知时的IK方法

我正在寻找一个理想的c ++库/代码(但如果不是至少一个算法),它解决了给定n个节点链的IK问题,其中估计链中k个节点(其中k <n)的位置众所周知.

任何帮助非常感谢.

c++ graphics robotics computational-geometry inverse-kinematics

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

使用Boost 1.68 / LLVM / VS2017时出现“ is_assignable”错误

在VS2017中切换到LLVM工具集以使用Boost 1.68构建代码时,我收到以下构建错误。该代码可以使用MSVC编译器很好地构建。1> C:\ boost_1_68_0 \ boost / type_traits / has_trivial_move_assign.hpp(49):错误:没有名为“ is_assignable”的模板;您是说'std :: is_assignable'吗?1> C:\ boost_1_68_0 \ boost / type_traits / intrinsics.hpp(233):注意:从宏“ BOOST_HAS_TRIVIAL_MOVE_ASSIGN”扩展

boost llvm-clang visual-studio-2017

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

Bazel - 导入静态库时包含目录中的所有标头

我是 Bazel 的新手,正在尝试将静态库添加到我的构建中。

举个简单的例子,我有以下内容。

cc_import(
  name = "my_test_lib"
  static_library = "lib\my_test_lib\test.lib"
  hdrs = ["lib\my_test_lib\include\headerA.h", 
          "lib\my_test_lib\include\headerB.h"]
  visibility = ["//visibility:public"],
)
Run Code Online (Sandbox Code Playgroud)

现在这工作正常。

但是,如果我有大量包含文件并且包含目录中有许多子目录,该怎么办?我是否必须单独输入我的主项目所依赖的每个标头,或者我可以执行类似以下操作来基本上使该目录/子目录中的所有标头可用吗?

 hdrs = [ "lib\my_test_lib\include\*"]
Run Code Online (Sandbox Code Playgroud)

c++ windows bazel

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

c ++:Eigen Library新手排序

我不能为我的生活解决为什么这不正常.它似乎没有返回第k个元素.

typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> matrix;

double test(matrix& D, int k)
{
    auto d = D.row(1);
    std::nth_element(d.data(),d.data()+k, d.data()+d.size());
    return d(k) ;
}
Run Code Online (Sandbox Code Playgroud)

我也试过了

template <typename ScalarType, typename Derived>
void Sort(Eigen::MatrixBase<Derived> &xValues)
{
std::sort(xValues.derived().data(), xValues.derived().data()+xValues.derived().size());
}


double test(matrix& D, int k)
{
    auto d = D.row(1);
    Sort<double>(d);
    return d(k) ;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

编辑:-

我刚试过改变

auto d = D.row(1);
Run Code Online (Sandbox Code Playgroud)

Eigen::VectorXd rowD = D.row(1);
....
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常.

有点困惑.

c++ sorting eigen

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

Armadillo C++: - 高效访问多维数据集结构中的列

使用Armadillo矩阵库我知道在2d矩阵中访问列的有效方法是通过简单地调用.col(i).

我想知道是否有一种有效的方法来提取存储在"立方体"中的列,而不必首先调用slice命令?

我需要以最有效的方式访问存储的数据(例如使用matlab表示法)A(:,i,j).我将在一个非常大的数据集上进行数百万次,因此速度和效率是一个高优先级.

c++ matrix armadillo

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

使用std :: optional通过引用将std :: vector &lt;int&gt;传递给函数

我不清楚通过引用将int的可选向量传递给函数的正确代码是否为:

void test_func(std::optional<std::vector<int>&> vec)
Run Code Online (Sandbox Code Playgroud)

要么

void test_func(std::optional<std::vector<int>>& vec)
Run Code Online (Sandbox Code Playgroud)

任何帮助,不胜感激。

c++ std c++17 stdoptional

4
推荐指数
3
解决办法
382
查看次数

C++ Boost Graph Library:输出自定义顶点属性

我正在努力让自定义属性编写器与BGL一起工作.

struct IkGraph_VertexProperty {
    int id_ ;
    int type_ ;
    std::pair<int,int> gaussians_ ; // Type of Joint, Ids of Gaussians
};


struct IkGraph_VertexPropertyTag
{
typedef edge_property_tag kind;
static std::size_t const num; 
};

std::size_t const IkGraph_VertexPropertyTag::num = (std::size_t)&IkGraph_VertexPropertyTag::num;

typedef property<IkGraph_VertexPropertyTag, IkGraph_VertexProperty> vertex_info_type;
Run Code Online (Sandbox Code Playgroud)

...方法中定义的自定义图形

typedef adjacency_list<setS, vecS, bidirectionalS, vertex_info_type, IkGraph_EdgeProperty> TGraph ;
TGraph testGraph ;
std::ofstream outStr(filename) ;
write_graphviz(outStr, testGraph, OurVertexPropertyWriter<TGraph,IkGraph_VertexPropertyTag, IkGraph_VertexProperty>(testGraph));
Run Code Online (Sandbox Code Playgroud)

...

template <class Graph, class VertexPropertyTag, class VertexProperty>
struct OurVertexPropertyWriter {

  OurVertexPropertyWriter(Graph &g_) : g(g_) {}

 template <class Vertex>
 void …
Run Code Online (Sandbox Code Playgroud)

c++ boost graphviz boost-graph

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

c ++数据结构,按值排序并运行FIFO

我正在寻找一种执行快速排序插入的数据结构,并基于FIFO进行操作.

我想要实现的是一个固定大小的数据结构来保存一系列值.在迭代的每个新步骤中,我希望能够有效地找到最小值或最大值(因此我希望数据结构始终被排序),并且在请求插入新元素时,最旧的元素将自动生成(或至少能够有效地)弹出/丢弃.

所以我想我正在寻找某种FIFO优先级队列.

任何帮助非常感谢.

c++ heap stack priority-queue data-structures

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

C++ Boost图库: - 为DFS指定根节点

在有向图上使用标准,

std::vector<size_type> dtime(N);
std::vector<size_type> ftime(N);
size_type t = 0;
dfs_time_visitor<size_type*> vis(&dtime[0], &ftime[0], t);
depth_first_search(graph, visitor(vis));
Run Code Online (Sandbox Code Playgroud)

似乎总是从节点0启动dfs.

如何告诉算法从已知的"根节点"开始?

c++ depth-first-search boost-graph

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

在/覆盖第3方窗口上显示QT小部件(在Windows中)

这不是我以前尝试过的东西,并且对HWND,Hooking等都是完全新手。

基本上,我想在第三方应用程序的窗口顶部显示/叠加一个QT窗口小部件(我无法控制,我只知道非常基本的信息,例如窗口标题/标题及其类名),并且我绝对不知道该怎么办。我还希望QT小部件相对于第三方应用程序的窗口保持在相对位置,即使该窗口在屏幕上移动也是如此。

c++ hook winapi qt overlay

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

C++:奇怪的遗失';' 错误之前,由于模板化类中的typedef'ed返回类型

在构建以下测试代码时,我遇到了一个非常令人困惑的编译器错误.

f:\data\sdks\smctc-1.00\examples\ik_pf\msvc\MarkerSampler.inl(16): error C2143: syntax error : missing ';' before 'MarkerSampler<MarkerT>::sample2'
f:\data\sdks\smctc-1.00\examples\ik_pf\msvc\MarkerSampler.inl(16): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Run Code Online (Sandbox Code Playgroud)

注意样本构建没有错误,但sample2导致问题.唯一的区别是一个明确地详细说明了返回类型而没有使用typedef而另一个使用了typdef的版本.

.h文件

#pragma once
#ifndef __MARKERSAMPLER_H_INCLUDED__
#define __MARKERSAMPLER_H_INCLUDED__

#include <vector>
#include <string>

#include <qthread.h>

#include <Wm5Vector3.h>
#include "UtilityFunctions.h"
#include "Marker.h"
#include "MarkerSet.h"

template <class MarkerT>
class MarkerSampler : public QThread
{


  typedef std::vector<MarkerT> MarkerVector ;
  typedef MarkerSet<MarkerT> MarkerSetT ;
  typedef std::vector<MarkerSetT> MarkerSetVector ;

public :

 MarkerSampler(const std::string inputDataDirectory, const unsigned int nSamples, const unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ templates typedef compiler-errors

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