Tag: stl

std :: vector 到char *数组

我有一个std::vector ,我需要将它用于读取char* foo的C函数的参数。 我已经看到 如何将std::string转换为char* 。 作为C++的新手,我正在尝试拼凑如何在向量的每个元素上执行此转换并生成char*数组。 我已经看到了几个密切相关的SO问题,但大多数似乎都说明了转向另一个方向并创建std::vector 。

如何在像糖果粉碎这样的游戏中为瓷砖分配颜色

我已经在C / C ++中进行了部分游戏,其中瓷砖在这里交换。 我想现在实施糖果粉碎,我知道画糖果需要花费很多精力。 让瓷砖完成工作。 在为瓷砖指定颜色的部分中,我不希望在行或列中显示三种颜色。 我如何以有效的方式做到这一点。 我目前正在随意分配颜色,如下所示: board[i][j].color=rand()%3; 看起来像这样: 是的我不希望行或列中的三个单元格或图块具有相同的颜色,即不超过两个相同颜色的相邻图块。 我的意思是我不想要一个颜色分配一次的解决方案,并检查一行中的三个瓷砖是否具有相同的颜色。 如果不再为所有图块生成颜色。 这太天真和昂贵。 另一种解决方案可以是在以光栅顺序检查向色块分配颜色之前,以查看下方或左侧的两个区块是否具有相同的颜色,如果是这样则分配一些其他颜色。 这也很明显。 有没有更好的办法? 在Weather Wane的回答之后,我发布了使用STL迭代器和set_difference方法进行设置差异操作的代码。 我正在尝试的是在通过使用设置操作仅消除已经重复两次(下方或左侧)的那些颜色来随机选择我正在形成的一组颜色之前。 代码中有问题。 我对STL知之甚少。 任何人都可以指导我如何正确使用它。 for(j=0;j<maxy;j++) {for(i=0;i<maxx;i++) { int first[] = {0,1,2,3},fsize,i34; std::vector v(5); std::vector::iterator it; board[i][j].x0=x0+i*dx+1; board[i][j].x1=x0+(i+1)*dx-1; board[i][j].y0=y0+j*dy+1; board[i][j].y1=y0+(j+1)*dy-1; if((i-1)>=0&&board[i-1][j].color==0&&(i-2)>=0&&board[i-2][j].color==0) {int second[] = {0}; std::sort (first,first+4); it=std::set_difference (first, first+4, second, second+1, v.begin()); v.resize(it-v.begin()); std::copy(v.begin(), v.end(), […]

和的等价性

这保证总是如此: std::numeric_limits::max() == INT_MAX C ++标准对此有何评论? 我在标准中找不到任何明确说明这一点的参考,但我继续读到那些应该是等价的。 对于同时实现C99(至少long long部分)和C ++ 98的编译器,C99类型不是C ++ 98标准呢? 我不确定是否有任何保证这一点始终成立: std::numeric_limits::max() == ULLONG_MAX 这是一个合理的假设吗?

这个bitset :: count()的实现如何工作?

这是使用MSVC 2010实现std::bitset::count : size_t count() const { // count number of set bits static char _Bitsperhex[] = “\0\1\1\2\1\2\2\3\1\2\2\3\2\3\3\4”; size_t _Val = 0; for (int _Wpos = _Words; 0 >= 4) _Val += _Bitsperhex[_Wordval & 0xF]; return (_Val); } 有人可以向我解释这是如何工作的吗? _Bitsperhex的诀窍是_Bitsperhex ?

实时查看循环缓冲区中的数据

我有一个传入的消息流,并想要一个允许用户滚动消息的窗口。 这是我目前的想法: 传入消息进入单个生产者单个消费者队列 线程将它们读出并将它们放入具有顺序id的循环缓冲区中 通过这种方式,我可以将多个传入流安全地放置在循环缓冲区中,并将输入解耦 Mutex用于协调UI和线程之间的循环缓冲区访问 从线程到UI的两个通知,一个用于第一个id,另一个用于缓冲区中的最后一个id。 这允许UI确定它可以显示什么,它需要访问的循环缓冲区的哪些部分,删除被覆盖的消息。 它只访问以当前大小和滚动位置填充窗口所需的消息。 我对用户界面中的通知感到不满意。 它将以高频率生成。 这些可能会排队或以其他方式受到限制; 延迟不应该影响第一个id,但处理最后一个id的延迟可能会导致角落情况出现问题,例如查看完整缓冲区的末尾, 除非 UI复制了它显示的消息,我想避免这种情况。 这听起来像是正确的做法吗? 任何调整都可以让它变得更加美味?

为什么在c ++中使用c字符串?

现在有没有什么好的理由在C ++中使用C-strings? 我的教科书在某些方面的例子中使用它们,我觉得使用std :: string会更容易。

Opencv函数只能以C代码方式调用,而不能以C ++方式调用

我是Opencv的新手。 根据说明下载并安装Opencv 2.4后,我开始编写我的第一个Opencv程序,该程序基本上是Web上教程的副本。 #include #include #include #include “cv.h” #include “highgui.h” #include #include #include using namespace std; using namespace cv; int main( int argc, char** argv ) { char* filename = “C:\\Research\abc.pgm”; IplImage *img0; if( (img0 = cvLoadImage(filename,-1)) == 0 ) return 0; cvNamedWindow( “image”, 0 ); cvShowImage( “image”, img0 ); cvWaitKey(0); cvDestroyWindow(“image”); cvReleaseImage(&img0); return 0; […]

关于使用std :: sort的std :: less和std :: more的困惑

在C中,sort通常实现,如下例所示: #include void Sort( int* arr, int n, bool(*cmp)(int,int) ) { for( int i=0; i<n-1; i++ ) { for( int j=i+1; j b; } // greater int descending( int a, int b ) { return a < b; } // less void main() { int arr[10] = { 1,3,5,7,9,2,4,6,8,10 }; // ascending Sort( arr, 10, […]

从大文本文件读入Qt中的结构数组?

我必须将一个文本文件读入一个结构数组。我已经编写了一个程序,但由于文件中有大约13个lac结构,因此花费了太多时间。 请建议我用C ++做到最好,最快捷的方法。 这是我的代码: std::ifstream input_counter(“D:\\cont.txt”); /**********************************************************/ int counter = 0; while( getline(input_counter,line) ) { ReadCont( line,&contract[counter]); // function to read data to structure counter++; line.clear(); } input_counter.close();

C等价于C ++ STL

可能重复: C中的标准数据结构库? C是否有类似于C ++ STL的任何数据结构实现? 特别是关联容器,哈希映射或任何其他具有大致恒定时间检索的结构? 谢谢!