小编Rio*_*iot的帖子

对于已构造的对象,使用std :: move与emplace_back()的C++ 11 push_back()的效率

在C++中,11 emplace_back()通常是优选的(在效率方面),push_back()因为它允许就地构造,但是当使用push_back(std::move())已经构造的对象时仍然是这种情况吗?

例如,emplace_back()在以下情况下仍然是首选?

std::string mystring("hello world");
std::vector<std::string> myvector;

myvector.emplace_back(mystring);
myvector.push_back(std::move(mystring));
// (of course assuming we don't care about using the value of mystring after)
Run Code Online (Sandbox Code Playgroud)

另外,在上面的例子中有没有任何好处来代替:

myvector.emplace_back(std::move(mystring));
Run Code Online (Sandbox Code Playgroud)

或者这里的举动完全是多余的,还是没有效果?

push-back move-semantics c++11 emplace

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

如何禁用关于#warning指令作为GCC扩展的GCC警告?

当使用#warning指令时,而不是一个警告,我得到两个 - 我生成的一个,另外一个 warning: #warning is a GCC extension [enabled by default].

我可以用#抑制#warning指令的结果-Wno-cpp,但这与我想要的相反.

我可以通过使用来解决这个问题,#pragma message()但这似乎使#warning指令变得毫无意义 - 是否有办法抑制此警告警告?

gcc warnings compiler-warnings gcc-warning

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

将boost :: asio线程池用于通用任务

这个博客中,我找到了一个非常巧妙的例子,说明如何使用boost :: asio创建一个简单的线程池.我基本上想要像这样使用它:

#include <thread>
#include <functional>
#include <boost/asio.hpp>

int main ( int argc, char* argv[] ) {
    asio::io_service io_service;
    asio::io_service::work work(io_service);

    std::vector<std::thread> threadPool;

    for(size_t t = 0; t < std::thread::hardware_concurrency(); t++){
        threadPool.push_back(thread(std::bind(&asio::io_service::run, &io_service)));
    }

    io_service.post(std::bind(an_expensive_calculation, 42));
    io_service.post(std::bind(a_long_running_task, 123));

    //Do some things with the main thread

    io_service.stop();
    for(std::thread& t : threadPool) {
        t.join();
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,Boost :: asio主要用于网络IO.但是,我主要想将它用于通用功能.将使用并发问题asio::io_service::strand.

所以我的问题:创建这样的线程池是一个好主意,即使我的程序不使用网络IO?与其他线程池实现相比,是否存在明显的性能损失?如果是这样,那么还有更好的实现吗?

c++ multithreading boost-asio threadpool c++11

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

Rstudio:Cmd + C/V无法在编辑器中工作

我曾经习惯pipe在Mac OSX 10.9.5上的Rstudio(v0.99.467)和Excel之间复制和粘贴数据.

pipe("pbcopy", "w")
pipe("pbpaste")
Run Code Online (Sandbox Code Playgroud)

有一段时间,我试图使用pipe("pbcopy", "r"),但Rstudio没有响应(因为我的代码是错误的).过了一会儿,我发现Cmd + C/V不再在编辑器中工作(但它仍然在R控制台中工作).我重新安装R-studio,删除后.rstudio-desktop,问题仍然存在.有谁知道发生了什么?我可以删除存储Rstudio快捷方式首选项的.bash文件(假设重新安装不会删除它)吗?BTW,Rstudio中的快捷方式.bash文件在哪里?

r rstudio

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

识别在phpstorm中没有扩展名的bash文件

我正在使用PHPStorm的最新版本,我认为这是7,并且希望使用诸如*.extension但没有扩展名的模式对文件进行文件支持.我尝试了模式*,它有效,但将我的所有文件都放在bash高亮显示中.

有没有人在没有使用.sh扩展名的情况下有解决方案?

编辑:Bash文件使用扩展名.sh和.bash识别.它工作得很好,但我想要的是在没有扩展名的文件上设置默认文件类型.如果我在bash文件列表中添加.*或*,我的所有文件都会被识别为bash文件.希望它更清楚,抱歉我的英语可能出错.

phpstorm

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

指向动态分配的boost multi_array中的类的指针,而不是编译

我对使用Boost的C++很陌生.

我希望类"world"的对象有一个名为"chunk"的数组"octreenode".以前我有一个普通的一维数组,这很好用.现在我正在尝试使用具有Boost的multi_array功能的3D数组,我真的不确定我做错了什么.

简化代码:

class world {
public:

  typedef boost::multi_array<octreenode, 3> planetchunkarray;  // a boost_multi for chunks
  typedef planetchunkarray::index index;
  planetchunkarray *chunk;

  world(double x,double y,double z,
        int widtheast, int widthnorth, int height) :
        originx(x), originy(y), originz(z),
        chunkseast(widtheast), chunksnorth(widthnorth), chunksup(height) {

    chunk = new planetchunkarray(boost::extents[chunksnorth][chunkseast][chunksup]);
    planetchunkarray::extent_gen extents;

    for (int cz = 0; cz < chunksnorth; ++cz) {
      for (int cx = 0; cx < chunkseast; ++cx) {
        for (int cy = 0; cy < chunksup; ++cy) {
          (*chunk)[cz][cx][cy] = new octreenode(1,72);
        } …
Run Code Online (Sandbox Code Playgroud)

c++ boost pointers boost-multi-array multidimensional-array

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

GCC:"__ unused__"与变量属性中的"未使用"

根据GCC自己的变量属性文档,声明未使用属性的正确语法是__attribute__((unused)).

但是,在许多示例和其他在线代码中,我经常看到__attribute__((__unused__)),它们似乎都起作用.

是否有理由__在任何一种情况下指定或省略?它有什么不同,是否有首选版本?是否存在使用一个而不是另一个可能导致问题的情况?

据推测,同样适用于其他属性参数?

c++ gcc compiler-warnings

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

为什么我的swap <string,string>比std版本慢得多?

这是我的C++代码:

inline static void swap(std::string& a1, std::string& a2) {    
    std::string temp( std::move(a1));
    a1 = std::move( a2 );
    a2 = std::move( temp );
}
Run Code Online (Sandbox Code Playgroud)

我运行了这个功能1000000次,平均花了78ms,但是这只std花了13ms.我只是看了一下实现std::swap,我发现它跟我的一样,所以为什么我的这么慢?

c++ performance c++11

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

3D稀疏矩阵实现?

我通过http://www.blackbeltcoder.com/Articles/algorithms/creating-a-sparse-matrix-in-net找到了一个非常好的 C# 稀疏矩阵实现。

但当我在 3d 坐标系中工作时,我需要一个稀疏矩阵实现,我可以用它来映射 3d 坐标系。

详细信息:我在内存中存储大量原始形状数据,例如立方体。我确实有大量的条目(大约 3000 万个),并且有很多空(零)条目。鉴于我的每个条目花费 1 个字节的条目,我想实现一个稀疏矩阵,这样我就可以相当节省内存空间。

注意:快速访问矩阵单元对我来说是一个相当重要的因素,因此我会牺牲速度与内存消耗。

c# 3d sparse-matrix

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

配置用于在Linux-64上为Linux-64构建MinGW-64的选项(最终针对Windows-64)

我想在以下位置构建MinGW-w64:

答:我想在Linux(64位)上编译MinGW本身。
B:我希望MinGW工具(编译器等)可以在Linux(64位)上运行。
C:我希望MinGW工具(编译器等)产生在Windows 64位(Win7和Win8)上运行的代码。

我在配置阶段遇到了麻烦。我已经在Google上搜索了一下,但是我无法找到配置时需要传递的选项。

我已经从(https://svn.code.sf.net/p/mingw-w64/code/trunk/)下载了MinGW-w64 SVN的源代码。(AFAICT这是当前的正式回购)。

源提供了文本帮助(mingw-w64-doc / howto-build / mingw-w64-howto-build.txt)。但是,这主要适用于希望在Windows上运行MinGW工具的用户。
示例选项(用于非multilib w64目标)是:

--host = x86_64-w64-mingw32 --target = x86_64-w64-mingw32 --disable-multilib

但是我想我希望host选项引用linux(对吗?)。我试过了

--host = x86_64-linux-gnu
--host = x86_64-pc-linux-gnu
但没有运气。

我得到错误:

配置:错误:请检查mingw-w64标头集和“构建/主机”选项是否设置正确。
配置:错误:../../../ svn / mingw-w64-v6615-2014-05-07 / mingw-w64-crt /为mingw-w64-crt配置失败

完整的日志是

    检查是否启用Makefile的维护者特定部分...否
    正在检查与BSD兼容的安装... / usr / bin / install -c
    检查构建环境是否正常...是
    / make / tool / MinGW / svn / mingw-w64-v6615-2014-05-07 / build-aux / missing:未知的“ --is-lightweight”选项
    尝试`/ make / tool / MinGW / svn / mingw-w64-v6615-2014-05-07 / build-aux …

linux mingw mingw-w64

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