我试着写一个类成员,它并行多次调用另一个类成员.
我写了一个简单的问题示例,甚至无法编译.调用std :: async我做错了什么?我想问题就在于我如何传递函数.
#include <vector>
#include <future>
using namespace std;
class A
{
int a,b;
public:
A(int i=1, int j=2){ a=i; b=j;}
std::pair<int,int> do_rand_stf(int x,int y)
{
std::pair<int,int> ret(x+a,y+b);
return ret;
}
void run()
{
std::vector<std::future<std::pair<int,int>>> ran;
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
auto hand=async(launch::async,do_rand_stf,i,j);
ran.push_back(hand);
}
}
for(int i=0;i<ran.size();i++)
{
pair<int,int> ttt=ran[i].get();
cout << ttt.first << ttt.second << endl;
}
}
};
int main()
{
A a;
a.run();
}
Run Code Online (Sandbox Code Playgroud)
汇编:
g++ -std=c++11 -pthread main.cpp
Run Code Online (Sandbox Code Playgroud) eclipse的自动完成功能现在无法正常工作,我搜索了几个小时,但我找不到解决问题的答案.我没有长时间使用它然后打开它后的第一件事是安装SWT和Windows构建器,即使我已经安装了swing.我的意思是,这可能是因为swt和swing引起的一些冲突(我读了一些关于冲突的内容,但如果可能的话,我不会这样做).
奇怪的是,当我按下ctrl + space时它没有显示任何内容但是当我去编辑 - >内容辅助 - >默认(它说它附近的Ctrl +空格)时,它显示需要显示/按需工作的东西.
public class Dsada {
String sssss;
public Dsada(){
sss //pressing ctrl+space is not working,Edit->ContentAssist->Default works fine
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案不是在Windows-> Preferences - > ...-> Content Assist-> Advanced下勾选/取消某些内容.我检查了"ctrl + space"是否被其他一些未被检查的键盘语言劫持了(这是在mkyong中建议的).
我读了一些关于bug的内容,但我无法理解.我试图删除eclipse并重新安装,但我想一些设置只是留在机器中,所以它不起作用.
提前致谢,
假设我有一个具有缓冲区溢出漏洞的代码,如下所示
int func(const char *str){
char buffer[100];
unsigned short len = strlen(str);
if(len >= 100){
return -1;
}
strncpy(buffer,str,strlen(str));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(取自这个问题)
如果从另一个函数(而不是用户输入)获取输入并且str的长度始终小于100,是否有办法利用此漏洞?
例如
int main() {
int user_input;
if (cin >> user_input) {
if(user_input == 1)
func("aaaa");
else
func("bbbb");
}
}
Run Code Online (Sandbox Code Playgroud)
假设代码中没有其他漏洞.
只是一个假设的问题,任何想法?
我编写了简单的C++代码并在C++中进行了测试,然后我为MATLAB调整了相同的代码,mex file_name.cpp并在MATLAB中使用与C++相同的编译器运行相同的代码.这是代码:
int k;
for(int j = 0; j < 100;j++){
for(int i = 0; i < 10000000; i++){
k++;
}
k/=10000000
}
Run Code Online (Sandbox Code Playgroud)
这是MATLAB代码:
double a;int j;int i;
double* k;
for(j = 0; j < 100;j++){
for(i = 0; i < 10000000; i++){
a = a+1;
}
a = a / 10000000;
}
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
k = mxGetPr(plhs[0]);
*k = (double)a;
Run Code Online (Sandbox Code Playgroud)
我已经为MATLAB编辑了这段代码,即改为合适的类型,添加MEX函数等,结果在MATLAB中约为900ms,而在C++中则为3100 ms.
我不明白的是两个都运行相同的代码和相同的编译器(在MATLAB中我mex -setup在命令行中编写,选择的Visual Studio编译器作为MEX编译器),但是,MATLAB的速度提高了大约3.5倍.
什么是MATLAB做得更快,C++没有做什么?有人可以解释一下为什么会有这么大的差异吗?我尝试过其他一些代码,在MATLAB中都快了3-6倍.
我的PC是64位Windows 7,Visual Studio 2010用于C++,MATLAB是R2012b. …
假设我有一个物体和一个点的掩模。我想找到对象蒙版最接近该点的点。
例如,在我的绘图中,有一个对象,图像中的蓝色形状(假设内部也是对象蒙版的一部分)。红点是我想要找到距对象蒙版最近距离的点。
所以,我想找到粗绿线,因为它是到面罩的最短距离,而不是其他线(粉色、橙色等)。我可以使用以下方法之一来执行此操作:
但这些方法都不是优雅的。我想知道什么是更优雅、最有效的方法来确定这一点?
我想播种randn功能,但我无法做到.
srand(time(NULL));
Mat mymat = Mat::zeroes(1024,1024,CV_32F);
randn(mymat,0,1);
Run Code Online (Sandbox Code Playgroud)
它不应该给我随机垫,名字mymat,其中mean = 0,和variance = 1.但它不是那样的.它mymat在每次运行中都是相同的.
这是randn的链接,声称srand工作.
我试图给出不同的数字而不是时间(NULL),但都有相同的输出randoms.我从另一台机器检查了同样的东西,它给第一台机器提供了相同的输出.因此播种不起作用.
谢谢,
考虑我有一个稳定的视频帧,其中稳定只通过旋转和平移(没有缩放):
如图所示,图像的右侧是先前像素的对称,即旋转后的黑色区域被对称填充.我添加了一条红线,表明它更清楚.

我想找到我稍后会使用的旋转角度.我可以通过SURF或SIFT功能完成此操作,但是,在实际情况下,我不会有原始帧.
我可能会通过蛮力找到角度,但我想知道是否有更好更优雅的解决方案.注意,对称部分的强度值与原始部分的精度值不完全相同.我已经检查了一些值,例如,V字的键盘上的右上像素是 [51 49 47]在原始部件而是[50 50 47]在对称拷贝,这意味着相应的像素不被保证是相同的RGB值.
我将在Matlab或python上实现它,并使用完成视频稳定ffmpeg.
编辑:我只有稳定的视频,无法访问原始视频或由ffmpeg生成的文件.
任何帮助/建议表示赞赏,
我想知道opencv如何对矩阵进行运算。例如,当我编写代码时
cv::add (Mat mat1, Mat mat2, Mat &result)
Run Code Online (Sandbox Code Playgroud)
使用两个for loops1000x750 图像大约需要 120-130 毫秒。但使用opencv add函数需要6-7毫秒。有谁知道他们的伎俩是什么?我想学习它能够编写opencv没有的功能。
我在 opencv 内部搜索并找到这两个 .cpp 文件(第一个,第二个),但我不知道我是否正在寻找正确的位置。
我只是想知道如何使用这个力量。有人可以帮助我吗?
谢谢,
这可能是一个重复的问题,但我无法找到我正在搜索的内容.如果存在,抱歉重复.
我想知道如果以下部分代码在内存分配方面是相同的.
//first
int n = some_number;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
int a = something;
}
}
//second
int i, j, a;
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
a = something;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,如果java 在第一个代码中分配变量a n ^ 2次和j n次,或者两者仅在第二个代码中分配一次.
我在java中尝试了几次,但结果不一致,就像在一次试验中,第一次是8秒,第二次是9秒,在另一次试验中反过来.所以,我想确定它们是否相等,
谢谢
考虑一下,我有以下矩阵
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Run Code Online (Sandbox Code Playgroud)
我想在不使用for循环的情况下检索偶数索引中的值(x和y索引都是偶数).
0 2
8 10
Run Code Online (Sandbox Code Playgroud)
我有大尺寸的图像(许多5000*5000 +灰度矩阵).使用for循环似乎不是最好的方法.我想听听是否有比循环更好的方法.
我尝试使用以下掩码,然后进行操作,但效率不高,因为我需要做4*n ^ 2乘法而不是n ^ 2(假设原始图像是2n*2n)
1 0 1 0
0 0 0 0
1 0 1 0
0 0 0 0
Run Code Online (Sandbox Code Playgroud)
请注意,我在矩阵上执行多个操作.任何帮助表示赞赏.
提前致谢,
vector <unordered_map <string, DomainInfo *> *> victimDomains;
这是什么意思?
我得到了第一颗星(DomainInfo*),但第二颗是什么?
让我们说DomainInfo有两个属性ID和name.如果我想把第二个元素放在DomainInfo第三个unordered_map中victimDomains我怎么称它?我的问题不正确吗?
谢谢,
我有一段代码需要理解.但是我迷失了一点.这是代码:
typedef unordered_map <string, TimeStampSet *> HIEMap;
typedef set <TimeStamp> TimeStampSet;
struct HostInfo {
HostActivity *hostActivity;
HIEMap *hieMapArr;
};
typedef unordered_map <uint32_t, HostInfo *> HostInfoMap;
HIEMap::iterator hieMapIt;
void method(...){
for (hieMapIt = hostInfoIt -> second -> hieMapArr -> begin();
hieMapIt != hostInfoIt -> second -> hieMapArr -> end();
hieMapIt = nextMapIt)
{
if (hieMapIt -> second == NULL) {
//what does *hieMapIt -> second* returns?
}
}
}
Run Code Online (Sandbox Code Playgroud)
什么hieMapIt -> second回报?我有点迷茫.
这不是所有代码,都有初始化等等.但是我没有把所有的代码放在这里.
谢谢,