草庐IT

c++ - 为文本编辑控件实现缓冲区的最佳方法是什么?

所以我正在制作自定义编辑控件。为了跟踪编辑控件的内容,我使用了动态分配的char数组。现在,我知道我需要在数组的中间插入某些情况下,例如当用户点击特定的观点。所以,我在想,我可以使用而不是字符数组std::vector,所以我可以使用.insert函数,而且不必太关心内存管理。我也在考虑直接将输入流存储到一个词的数组/vector(不保持连续的缓冲区),因为我这样做的全部目的是实现语法突出显示。哪种处理方法更好?为什么? 最佳答案 对于当今计算机的文本缓冲区,您确实可以只使用一个连续的缓冲区(例如vector),因为CPU足够快以缩

C++ 套接字 256 字节缓冲区

我正在尝试使用C++中的一些套接字网络编程。我正在尝试发送文本“HelloWorld!”使用C++send()函数发送到服务器。起初,我将缓冲区的大小设置为13,因为“HelloWorld!”总共是12个字符(你必须使它比字符数多一个)。如果我发送大约7次,发送功能只会将字符发送到服务器。当它最终到达服务器时,它看起来像这样:“HelloWorld!HelloWorld!HelloWorld!HelloWorld!HelloWorld!HelloWorld!HelloWorld!”现在是有趣的部分。“HelloWorld!”如果我将缓冲区大小设置为256(charbuffer[256]

c++ - 在 C++ 中将字节序列重复到更大缓冲区的最简单方法

给定(在C++中)char*byte_sequence;size_tbyte_sequence_length;char*buffer;size_tN;假设byte_sequence和byte_sequence_length被初始化为一些任意长度的字节序列(及其长度),并且buffer被初始化为指向N*byte_sequence_length字节,将byte_sequence复制到bufferN次最简单的方法是什么?STL/BOOST中是否已经有类似的功能?例如,如果序列是“abcd”,N是3,那么buffer最终将包含“abcdabcdabcd”。 最佳答案

c# - 如何有效地包装固定大小的循环缓冲区的索引

我有一个固定大小的循环缓冲区(作为数组实现):初始化时,缓冲区会填充指定的最大数量的元素,这允许使用单个位置索引来跟踪我们当前的位置圆圈。访问循环缓冲区中元素的有效方法是什么?这是我目前的解决方案:intGetElement(intindex){if(index>=buffer_size||index=buffer_size?(index+end_index)-buffer_size:end_index+index;}returnbuffer[index];}一些定义:end_index是紧跟在圆圈中最后一个元素之后的元素的索引(它也被认为与start_index相同,即圆圈的第一个元

c++ - 为什么我可以使用大缓冲区作为 vector ,但不能在 Windows 上使用 new?

我使用的是64位Windows7Pro和VisualStudio2010Pro。我正在尝试分配和使用大于4GB的缓冲区(用于高数据速率数据捕获)。将缓冲区作为字节vector分配和写入工作正常。将缓冲区分配为字节数组工作正常,但写入该数组很快就会崩溃。(最后打印的消息是“缓冲区已分配”。)注释掉vector部分并不能解决问题。以下是我的测试程序:#include#include#includeusingnamespacestd;intmain(){constULONG64BUF_SIZE=4*1024ULL*1024ULL*1024ULL;{vectorv(BUF_SIZE);cout

c# - 如何在 Windows 中为高级网络适配器属性设置巨型数据包和接收/传输缓冲区?

我正在尝试为网络适配器设置一些高级属性,例如巨型数据包、接收/传输缓冲区。我尝试使用Win32_NetworkAdapter、Win32_NetworkConnection、Win32_NetworkAdapterConfigurationWMI类。他们都做不到。谁能帮帮我? 最佳答案 “巨型数据包”支持仅意味着大MTU(通常为9000字节)。也许是SetMTUmethodWin32_NetworkAdapterConfiguration类,或SetIFEntry()函数(参见dwMtu字段)。传输和接收缓冲区的大小在套接字级别设置

c++ - 为 OpenGL 的顶点缓冲区对象动态打包数据

我正在尝试为OOP中的VBO编写一个包装器,它由addVertex、addNormal..addX、flush()和render()函数组成。起初,我将顶点、法线、索引保存在单独的vector中,例如:std::vectorvertexBuffer;std::vectorcolorBuffer;std::vectornormalBuffer;std::vectortexCoordBuffer;std::vectorindexBuffer;但正如我在某处读到的那样,为每个VBOID保留不同的VBOID是完全低效的,因此最好按VertexNormalTexCoordColor-VNTC-V

c++ - 如何使用 boost::iostreams 更改缓冲区大小?

我的程序并行读取几十个非常大的文件,一次只读一行。似乎主要的性能瓶颈是HDD从一个文件到另一个文件的寻道时间(虽然我不完全确定如何验证这一点),所以我认为如果我可以缓冲输入会更快。我正在使用这样的C++代码通过boost::iostreams“过滤流”读取我的文件:input=newfiltering_istream;input->push(gzip_decompressor());file_sourcein(fname);input->push(in);根据documentation,file_source没有任何方法来设置缓冲区大小,但filtering_stream::push似

c++ - 具有直接输出缓冲区/字符串结果访问的 std::stringstream,避免复制?

是否有std::stringstream的规范/公共(public)/免费实现变体,我每次调用时都不需要为完整的字符串拷贝付费海峡()?(可能通过在osteam类中提供直接的c_str()成员?)我在这里发现了两个问题:C++stlstringstreamdirectbufferaccess(是的,它基本上是相同的标题,但请注意,它被接受的答案根本不适合这里的问题。)Streamfromstd::stringwithoutmakingacopy?(同样,接受的答案与这个问题不匹配。)“当然”还有已弃用的std::strstream类确实允许直接缓冲区访问,尽管它的接口(interfac

c++ - 如何有效地将 std::vector 视为 C 缓冲区?

对于Cbuffer,我经常这样做:BYTEbuffer[MAX_SIZE];intdataSize=0;while(appRunning()){dataSize+=Receive(buffer+dataSize,MAX_SIZE-dataSize);intprocessedSize=ProcessBuffer(buffer,dataSize);ASSERT(processedSize是否可以在不损失太多性能的情况下使用std::vector这样做?编辑:我找到了一种用std::vector替换原始C缓冲区的方法。std::vectorvbuf;vbuf.reserve(MAX_SIZE