假设你有一个类的std :: list.您可以通过两种方式制作此列表:1)
std::list<MyClass> myClassList;
MyClass myClass;
myClassList.push_front(myClass);
Run Code Online (Sandbox Code Playgroud)
使用此方法,将对象传递给列表时将调用复制构造函数.如果该类有许多成员变量,并且您多次进行此调用,则可能会变得昂贵.
2)
std::list<MyClass*> myClassList;
MyClass* myClass = new MyClass();
myClassList.push_front(myClass);
Run Code Online (Sandbox Code Playgroud)
此方法不会调用该类的复制构造函数.我不完全肯定在这种情况下会发生什么,但我认为该列表将创建一个新的MyClass*并分配参数的地址.事实上,如果你在堆栈而不是堆上创建myClass并让它超出范围,那么myClassList.front()是无效的,因此必须如此.
如果我错了,请反驳我,但我相信第二种方法对某些类来说效率更高.
我是一名使用 C++ 代码的 Java 程序员,需要一些异常处理方面的帮助。
我有以下结构的代码:
try{
...
}
catch( ... )
{
log("Exception occurred");
}
Run Code Online (Sandbox Code Playgroud)
发生了异常,但 try 块确实很大,而且调试不是一种选择,因此我需要最少地修改代码以提供有关异常的相关信息。
所以我在现有的 catch 块之前添加了以下 catch 块(使用我的 Java 知识并参考 C++ 指南):
catch(exception e)
{
log(e.what());
}
Run Code Online (Sandbox Code Playgroud)
但是,我仍然收到旧消息 - “发生异常”。try 块中的代码包含许多低级函数,例如strncpy, memcpy等。
为什么这个catch块没有按预期工作?我该怎么做才能获取有关正在发生的异常以及在哪一行上的信息,类似于 Java 轻松提供的堆栈跟踪。
为什么即使不构造类对象,这个C++程序也能成功运行?我们来看下面的代码:
#include<iostream>
using namespace std;
class Dopey
{
public:
Dopey() {cout << "Dopey\n";}
};
class Bashful
{
public:
Bashful() { cout << "BashFul\n";}
void f() { cout << " f \n";}
int i;
};
class Sneezy
{
public:
Sneezy(int i) {cout << "copy int \n";}
Sneezy(Bashful d) { cout << "copy Bashful\n";}
Sneezy(Bashful* d) {d->f();d->i=100;} //How could this be correct without
// constructing d !!!!!!!!
Sneezy();
};
class Snow_White
{
public:
Snow_White();
Dopey dopey;
Sneezy sneezy;
Bashful bashful;
private:
int …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用guava订阅EventBus.试图查看网站文档,但无法看到任何显示如何执行此操作的示例.
有人试过吗?
private final EventBus eventBus = new EventBus();
eventBus.post(eventId); // where eventId is a string.
Run Code Online (Sandbox Code Playgroud)
这是在其中一个罐子里.现在我需要订阅这个eventbus并检查是否有任何新的eventId已发布.我怎样才能做到这一点?
任何帮助表示赞赏.
谢谢!!
我刚刚开始使用SSE优化我的计算机视觉项目代码,旨在检测图像中的肤色.以下是我的功能.该函数采用彩色图像并查看每个像素并返回概率图.注释掉的代码是我最初的C++实现,其余的是SSE版本.我对它们进行了计时,并且发现SSE并不比我原来的C++代码快得多.有关正在发生的事情或如何进一步优化功能的任何建议?
void EvalSkinProb(const Mat& cvmColorImg, Mat& cvmProb)
{
std::clock_t ts = std::clock();
Mat cvmHSV = Mat::zeros(cvmColorImg.rows, cvmColorImg.cols, CV_8UC3);
cvtColor(cvmColorImg, cvmHSV, CV_BGR2HSV);
std::clock_t te1 = std::clock();
float fFG, fBG;
double dp;
__declspec(align(16)) int frgb[4] = {0};
__declspec(align(16)) int fBase[4] = {g_iLowHue, g_iLowSat, g_iLowVal, 0};
__declspec(align(16)) int fIndx[4] = {0};
__m128i* pSrc1 = (__m128i*) frgb;
__m128i* pSrc2 = (__m128i*) fBase;
__m128i* pDest = (__m128i*) fIndx;
__m128i m1;
for (int y = 0; y < cvmColorImg.rows; y++)
{
for (int x = 0; …Run Code Online (Sandbox Code Playgroud) 有一系列互斥体.我的功能:
2A.如果没有,那么锁定它
2B.如果已锁定,请等待解锁并锁定它
另一个功能解锁它.
问题是我在等待部分遇到了崩溃:
HANDLE mutexes[N];
void func(int i)
{
// (*) wait until unlocked or create if unlocked
while ((mutexes[i] = CreateMutex(NULL, TRUE/*same with FALSE*/, NULL)) != NULL);
/*or WaitForSingleObject(mutexes[i], INFINITE)*/
mutexes[i] = CreateMutex(NULL, TRUE, NULL);
}
Run Code Online (Sandbox Code Playgroud)
在(*)点,我遇到了崩溃 - 访问冲突.当它试图创建之前已经创建的互斥锁[i]时发生崩溃.我不能使用WaitForSingleObject,因为第一次没有创建互斥锁[i],文档说WaitForSingleObject未定义.此外,如果我使用此功能,我会得到同样的崩溃.
我只需要这种简单伪代码的模拟
if (mutex_has_been_created[mutexes[i]])
WaitUntilRelease()
CreateMutex();
Run Code Online (Sandbox Code Playgroud)
我试图将它包装在一个关键部分并获得相同的结果.我确信这i是在正确的范围内.我不能使用Boost/pThreads/etc.
我知道我的问题很简单,但我找不到解决方案.在所有示例中,我都看到过之前创建了一个互斥锁WaitForSingleObject,这对我来说不起作用.
谢谢.
我有基本类型转换的问题.
#include<stdio.h>
int main()
{
printf("%.22f",0.30);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是0.2999999999999999888978
为什么0.3转换为较小的值
任何帮助非常感谢
Nandish
我正在浏览论坛,看到一个关于计算字符串中每个字母数的问题.我正在自学并做了一些研究,现在开始做项目了.这里我打印了数组的元素.但我这样做没有指针.我知道我可以使用指向数组的指针并为每个值增加它,但我需要一些帮助.
这是我没有指针的代码:
code main() {
char alph [] = {'a', 'b', 'c'};
int i, o;
o = 0;
for(i=0; i < 3; i++)
{ cout << alph[i] << ' '; };
};
Run Code Online (Sandbox Code Playgroud)
这是我的错误代码,无法使指针工作.
main() {
char alph [] = {'a', 'b', 'c'};
char *p;
p = alph;
for (; p<=3; p++);
cout << *p;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
我希望答案不是太明显; 我不是故意浪费任何人的时间.这也是我的第一篇文章,所以如果有人想给我建议,谢谢.
我曾经typedef vector<MyDatatype> ls;只通过改变typedef定义来启用列表和向量之间的切换.除了sort函数之外,所有的工作都很好,对于向量,它实现的方式不同
void show(driver& ls)
{
ls.sort(compare); //this line gives error
driver::iterator iter=ls.begin();
int i=1;
while(iter!=ls.end())
{
cout<<i<<". "<<iter->name<<string(maxlength+1-(iter->name).size(),' ');
streamsize prec=cout.precision(2);
cout<<grade(*iter);
cout.precision(prec);
cout<<endl;
i++; iter++;
}
}
Run Code Online (Sandbox Code Playgroud)
做类似的事情:
if(typeid(ls)==typeid(list<string>)) ls.sort(compare);
else if(typeid(ls)==typeid(vector<string>)) sort(ls.begin(), ls.end(), compare);
Run Code Online (Sandbox Code Playgroud)
不会有任何好处.所以我的问题是:是否可以测试类型并相应地使用合适的排序函数,或者我是否必须编写自己的排序函数(或者可能将向量转换为列表)?我找不到任何相关的帖子.
如果我有std::any一个std::string或一个int,我怎么能投清楚交代包含的类型呢?
std::any有type它,但我不能使用这种类型来施放.
例:
#include <any>
#include <iostream>
#include <string>
int main(void) {
std::any test = "things";
std::any test2 = 123;
// These don't work
std::string the_value = (std::string) test;
int the_value2 = (int) test2;
std::cout << the_value << std::endl;
std::cout << the_value2 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)