我有一些看起来有点像这样的代码:
std::random_device rd;
#pragma omp parallel
{
std::mt19937 gen(rd());
#pragma omp for
for(int i=0; i < N; i++)
{
/* Do stuff with random numbers from gen() */
}
}
Run Code Online (Sandbox Code Playgroud)
我有几个问题:
std::random_device线程安全的?也就是说当几个线程立刻调用它时,它会做一些无用的事情吗?如果它对std::random_device我主要在Windows上运行的工作有任何影响,尽管我希望代码在Linux和OSX上同样运行良好.
我使用Qt Creator 4.2.0运行Qt 5.7.1(MSVC 2015,32位).我有问题QSslSocket.我收到以下错误:
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
Run Code Online (Sandbox Code Playgroud)
我去了以下位置openssl github并下载了zip文件.我已将"libeay32.dll"和"ssleay32.dll"文件移到我的发布目录中,我仍然遇到这些错误.有没有人QSslSocket能够让我的步骤让套接字工作或有任何建议?
我有一个Java程序,我想将其转换为C++.因此,LinkedhashmapJava代码中使用了一种数据结构,我想将其转换为C++.LinkedHashmapC++中是否有等效的数据类型?
我尝试使用std::unordered_map它,但它不保持插入的顺序.
为了开始boost::thread,我写了一个非常简单的例子 - 它不起作用.有谁可以指出我的错误?
我写了一个非常简单的仿函数类来完成这项工作.它应该计算一个std::vector双精度的总和,并给我一个方法来获得后来的结果:
class SumWorker
{
private:
double _sum;
public:
SumWorker() : _sum(-1.0) {}
void operator() (std::vector<double> const & arr)
{
_sum = 0.0;
for(std::vector<double>::const_iterator i = arr.begin();
i != arr.end();
i++)
{
_sum += (*i);
}
}
double const value() const
{
return _sum;
}
};
Run Code Online (Sandbox Code Playgroud)
现在,我可以通过两种方式之一计算总和.如果我在主线程中这样做,比如,
SumWorker S;
S(numbers); // "numbers" is an std::vector<double>
double sum = S.value(); // "sum" now contains the sum
Run Code Online (Sandbox Code Playgroud)
一切正常.但是,如果我尝试在一个单独的线程中执行此操作(这是重点),
SumWorker S;
boost::thread thread(S, numbers); // Should be …Run Code Online (Sandbox Code Playgroud) 据我所知,C++从左到右工作.例如,如果我这样做:
std::cout << "output" << "stream";
Run Code Online (Sandbox Code Playgroud)
C++首先从最左边的东西(std :: cout)开始,然后是<<运算符,它取右边的字符串文字("输出")并将它放到运算符左边的对象(std :: COUT).然后C++返回运算符左侧的对象(std :: cout),然后继续代码,另一个<<运算符.
"="运算符返回什么?
如果我做
double wage = 5;
double salary = wage = 9999.99;
Run Code Online (Sandbox Code Playgroud)
我认为"="运算符只返回"="的左或右操作数.因此,根据我的逻辑,在工资初始化的行中,工资用工资值初始化,然后"="运算符返回工资或工资(比如工资),然后它将9999.99分配给工资,但工资是走了,应该保持5的价值.
但是当我在"工资"初始化之后检查"薪水"和"工资"的值时,两者的值都是9999.99.如果我应用与上面使用std :: cout相同的逻辑,那么应该只有一个变量,"salary"或"wage",值为9999.99
我的牛顿二项式系数程序存在问题.首先它打印负数,但改变阶乘函数类型unsigned long long似乎已经解决了打印负数的问题.该程序适用于max n = 20,在它上面开始打印零,一和二.不知道如何解决这个问题,希望有人可以帮我一臂之力.
#include <iostream>
using namespace std;
unsigned long long factorial(int n) {
if (n == 0) {
return 1;
}
return n*factorial(n - 1);
}
void Binom(int n ,int k) {
unsigned long long factorialResult;
if (k > n) {
return;
}
factorialResult = factorial(n) /(factorial(k) * factorial(n - k));
cout << factorialResult << " ";
if (n >= k) {
Binom(n, k + 1);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个通过 R 为我的项目加载的 C 代码。使用 dyn.load,我能够在 Windows 64 位计算机和 Linux 服务器中加载 C 代码。但是,当我尝试在 Windows 32 位计算机中加载 .dll 时,出现以下错误。
我尝试使用整个路径,从工作目录运行 dyn.load 命令,但它们都不起作用。我的R版本: R版本
另外,我还编辑了系统变量,您可以在下面找到系统变量。
`C:\ProgramData\Oracle\Java\javapath;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\Program Files\Common Files\Roxio Shared\DLLShared\;
C:\Program Files\Common Files\Roxio Shared\10.0\Roxio Central36;
C:\Program Files\Windows Imaging\;
C:\Program Files\QuickTime\QTSystem\;
C:\Program Files\R\R-3.3.2\bin;
C:\Rtools\bin;
C:\Rtools\mingw_32\bin;
C:\Rtools\mingw_32\lib\gcc\i686-w64-mingw32\4.9.3;
C:\Users\******\Documents\R\R-3.3.2\library\Rcpp`
Run Code Online (Sandbox Code Playgroud)
针对此类问题的现有解决方案对我没有帮助。
如果有人能帮助我解决这个问题,那就太好了。
我有两个问题.
第一个问题
我读关于迭代器在C++从C++ primer 5th edition书.在本书的一个代码示例中,给出了以下代码片段将在向量中找到中间元素vi
auto mid = vi.begin() + vi.size() / 2;
Run Code Online (Sandbox Code Playgroud)
现在我想问一下,为什么vi.begin()加入vi.size()?会不会vi.size()/2有足够找到矢量中间元素vi?
第二个问题
auto mid = vi.begin() + vi.size() / 2;
Run Code Online (Sandbox Code Playgroud)
在此代码段中,如果我vi.begin() + vi.size()像这样添加括号:
auto mid = (vi.begin() + vi.size()) / 2;
Run Code Online (Sandbox Code Playgroud)
它抛出错误 no "/" operator matches these operands...
为什么会抛出这个错误?我问这个是因为逻辑上这个表达式vi.begin() + vi.size()应该首先计算,结果应该除以2.
如果我错了,请纠正我.
我一直想知道万一double达到最大值,会发生什么,所以我决定编写以下代码:
#include <stdint.h>
#include <iostream>
#define UINT64_SIZE 18446744073709551615
int main() {
std::uint64_t i = UINT64_SIZE;
double d1 = ((double)(i+1)) / UINT64_SIZE;
double d2 = (((double)(i)) / UINT64_SIZE)*16;
double d3 = ((double)(i * 16)) / UINT64_SIZE;
std::cout << d1 << " " << d2 << " " << d3;
}
Run Code Online (Sandbox Code Playgroud)
我期待这样的事情:
0 16 0
Run Code Online (Sandbox Code Playgroud)
但这是我的输出:
0 16 1
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么值d3和d1不同?
编辑:
我决定将代码更改为此,以查看结果:
#include <stdint.h>
#include <iostream>
#define UINT64_SIZE 18446744073709551615
int main() {
std::uint64_t i = UINT64_SIZE; …Run Code Online (Sandbox Code Playgroud) int a[4] = {10,20,30,40};
std::vector<int> vec(4);
std::copy(a, a + 4, vec.begin());
Run Code Online (Sandbox Code Playgroud)
我在vc ++中遇到以下错误,它显示警告,但标记为错误,我该如何解决?
严重性代码说明项目文件行抑制状态错误C4996
std::copy::_Unchecked_iterators::_Deprecate:std::copy使用可能不安全的参数进行调用-此调用依赖于调用者检查传递的值是否正确。要禁用此警告,请使用-D_SCL_SECURE_NO_WARNINGS。请参阅有关如何使用Visual C ++“检查的迭代器” ConsoleApplication3的文档:e:\ programs \ vc \ include \ xutility 2372
c++ ×10
boost-thread ×1
c ×1
c++11 ×1
copy ×1
iterator ×1
openmp ×1
overflow ×1
qsslsocket ×1
qt ×1
r ×1
random ×1
vector ×1
visual-c++ ×1