在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)
或者这里的举动完全是多余的,还是没有效果?
当使用#warning指令时,而不是一个警告,我得到两个 - 我生成的一个,另外一个
warning: #warning is a GCC extension [enabled by default].
我可以用#抑制#warning指令的结果-Wno-cpp,但这与我想要的相反.
我可以通过使用来解决这个问题,#pragma message()但这似乎使#warning指令变得毫无意义 - 是否有办法抑制此警告警告?
在这个博客中,我找到了一个非常巧妙的例子,说明如何使用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?与其他线程池实现相比,是否存在明显的性能损失?如果是这样,那么还有更好的实现吗?
我曾经习惯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文件在哪里?
我正在使用PHPStorm的最新版本,我认为这是7,并且希望使用诸如*.extension但没有扩展名的模式对文件进行文件支持.我尝试了模式*,它有效,但将我的所有文件都放在bash高亮显示中.
有没有人在没有使用.sh扩展名的情况下有解决方案?
编辑:Bash文件使用扩展名.sh和.bash识别.它工作得很好,但我想要的是在没有扩展名的文件上设置默认文件类型.如果我在bash文件列表中添加.*或*,我的所有文件都会被识别为bash文件.希望它更清楚,抱歉我的英语可能出错.
我对使用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) 根据GCC自己的变量属性文档,声明未使用属性的正确语法是__attribute__((unused)).
但是,在许多示例和其他在线代码中,我经常看到__attribute__((__unused__)),它们似乎都起作用.
是否有理由__在任何一种情况下指定或省略?它有什么不同,是否有首选版本?是否存在使用一个而不是另一个可能导致问题的情况?
据推测,同样适用于其他属性参数?
这是我的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,我发现它跟我的一样,所以为什么我的这么慢?
我通过http://www.blackbeltcoder.com/Articles/algorithms/creating-a-sparse-matrix-in-net找到了一个非常好的 C# 稀疏矩阵实现。
但当我在 3d 坐标系中工作时,我需要一个稀疏矩阵实现,我可以用它来映射 3d 坐标系。
详细信息:我在内存中存储大量原始形状数据,例如立方体。我确实有大量的条目(大约 3000 万个),并且有很多空(零)条目。鉴于我的每个条目花费 1 个字节的条目,我想实现一个稀疏矩阵,这样我就可以相当节省内存空间。
注意:快速访问矩阵单元对我来说是一个相当重要的因素,因此我会牺牲速度与内存消耗。
我想在以下位置构建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 … c++ ×4
c++11 ×3
gcc ×2
3d ×1
boost ×1
boost-asio ×1
c# ×1
emplace ×1
gcc-warning ×1
linux ×1
mingw ×1
mingw-w64 ×1
performance ×1
phpstorm ×1
pointers ×1
push-back ×1
r ×1
rstudio ×1
threadpool ×1
warnings ×1