我正在阅读关于C++ STL算法的Nicolai Josuttis一书.对于许多算法,例如stable_sort(),他提到算法的复杂性n*log(n),如果有足够的内存可用,否则它是n*log(n)*log(n).我的问题是内存使用情况如何影响复杂性?STL如何检测这种情况?
我有问题.我创建套接字,连接,发送字节,一切都好.
并且为了接收数据我使用recv函数.
char * TOReceive= new char[200];
recv(ConnectSocket, TOReceive , 200, 0);
Run Code Online (Sandbox Code Playgroud)
当有一些数据读取和返回时,成功,当没有数据等待数据时,我需要限制等待时间,例如,如果10秒没有数据应该返回.
非常感谢.
我正在阅读一本关于模板的书,并找到了以下代码:
template <template <class> class CreationPolicy>
class WidgetManager : public CreationPolicy<Widget>
{
...
void DoSomething()
{
Gadget* pW = CreationPolicy<Gadget>().Create();
...
}
};
Run Code Online (Sandbox Code Playgroud)
我没有获得为CreationPolicy指定的嵌套模板(这也是一个模板).奇怪的语法是什么意思?
我正在阅读一些与线程相关的代码,并发现了这段代码:
MyThread::start()
{
//Create a thread
m_pThread = AfxBeginThread(/*some parameters*/)
//Create a duplicate handle for the created thread
m_hDuplicateHandle = DuplicateHandle(/* some more parameters*/)
}
MyThread::stop()
{
//Set some variables so that the thread comes out of its run() function
WaitForSingleObject(m_hDuplicateHandle, defaultTimeout);
CloseHandle(m_hDuplicateHandle);
}
Run Code Online (Sandbox Code Playgroud)
我的问题,为什么需要重复的句柄?我们不能直接等待原来的线程句柄吗?它以某种方式变得无效吗?
我有一个包含大量元素的向量.现在我想编写一个小函数来计算向量中偶数或奇数元素的数量.由于性能是一个主要问题,我不想在循环中放入if语句.所以我写了两个小函数,如:
long long countOdd(const std::vector<int>& v)
{
long long count = 0;
const int size = v.size();
for(int i = 0; i < size; ++i)
{
if(v[i] & 1)
{
++count;
}
}
return count;
}
long long countEven(const std::vector<int>& v)
{
long long count = 0;
const int size = v.size();
for(int i = 0; i < size; ++i)
{
if(0 == (v[i] & 1))
{
++count;
}
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我可以通过编写这样的单个模板函数来获得相同的结果:
template <bool countEven>
long long countTemplate(const …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的简单类:
class A
{
public:
void f(const int& n)
{
std::cout<<"A::f()" << n <<"\n";
}
};
Run Code Online (Sandbox Code Playgroud)
我试图像这样使用它:
std::vector<A> vec;
A a;
vec.push_back(a);
std::for_each(vec.begin(), vec.end(), std::bind2nd(std::mem_fun_ref(&A::f), 9));
Run Code Online (Sandbox Code Playgroud)
但是当我编译代码时,我在函数头文件中的某处得到以下错误:
错误C2529:'_ Right':对引用的引用是非法的
如果我删除参数f()中的引用,它编译正常.我该如何解决这个问题?我不想删除引用,因为在我的实际代码中复制对象是非常昂贵的.另外,我没有使用提升.
我前段时间问过一个帐户,我不记得如何操纵基本指针,有人给了我一个非常好的演示
例如
char *ptr = "hello" (hello = a char array)
Run Code Online (Sandbox Code Playgroud)
所以现在*ptr指向h
ptr++ =移动ptr指向下一个元素,得到它的值我做*ptr,这给了我e
好吧到目前为止我希望:D但是现在我需要操纵一个char **ptr并且想知道我是如何以一种模仿二维阵列效果的方式做到这一点的?
一些基本提示将非常感激,因为我需要做一个**ptr模仿二维数组的任务,而不知道它是如何做到这首先意味着我甚至无法在纸上解决它(例如,你如何解除引用**ptr ,你如何获得[x] [y]值等)
谢谢
我需要std::list从我的应用程序中运行的一个或多个线程访问(仅读取)数据.
此列表将仅在引导应用程序时创建一次,并且此列表将在读取之后创建
从muliple线程...说我将这样做
for (std::list <iterator>iii=list->begin();ii!=list->end();ii++)
Run Code Online (Sandbox Code Playgroud)
从muliple线程中读取列表.
现在我的问题是,如果我没有同步访问列表,它会创建任何访问冲突问题吗?
我没有任何同步prirmitive运行应用程序.我没有面对任何问题.但由于我对此表示怀疑,我想确认一下.
根据我的理解,即使在mutithreading应用程序中,只有一个线程在运行时由OS执行.因为我没有从多个线程更新列表并且所有线程都在读取列表,所以可能没有必要给列表提供独占访问权限.它是否正确?
如果我做错了,请以正确的方式告诉我
有人可以告诉我一种有效的方法来验证CString对象中存在的数字是有效整数还是浮点数?
使用函数指针而不是函数本身的真正好处是什么?它会使执行更快吗?或者当它传递给另一个函数时它是否提供了便利?