Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在现代C+中,处理中等大小字节数组的正确方法是什么+;? 许多语言和框架提供了一个“字节数组”类型,但是C++标准库没有。什么类型适合用于中等大小的1、可调整大小的字节数组?如何有效地使用该类型?(特别是:分配、作为参数传递和销毁)_C++_C++11 - Fatal编程技术网

在现代C+中,处理中等大小字节数组的正确方法是什么+;? 许多语言和框架提供了一个“字节数组”类型,但是C++标准库没有。什么类型适合用于中等大小的1、可调整大小的字节数组?如何有效地使用该类型?(特别是:分配、作为参数传递和销毁)

在现代C+中,处理中等大小字节数组的正确方法是什么+;? 许多语言和框架提供了一个“字节数组”类型,但是C++标准库没有。什么类型适合用于中等大小的1、可调整大小的字节数组?如何有效地使用该类型?(特别是:分配、作为参数传递和销毁),c++,c++11,C++,C++11,1:所谓中等大小,我的意思是小于100MB。您可以使用std::vector,或者按照@Oli的建议std::vector。是的,你可以传递它,而不必复制全部内容 void f(std::vector<unsigned char> & byteArray) //pass by reference : no copy! { // } std::vector<unsigned char> byteArray; //... f(byteArray); //

1:所谓中等大小,我的意思是小于100MB。

您可以使用
std::vector
,或者按照@Oli的建议
std::vector
。是的,你可以传递它,而不必复制全部内容

void f(std::vector<unsigned char> & byteArray) //pass by reference : no copy!
{
     //
}

std::vector<unsigned char>  byteArray;
//...
f(byteArray); //no copying is being made!
void f(std::vector&byteArray)//按引用传递:无副本!
{
//
}
std::矢量字节数组;
//...
f(拜特里)//禁止复制!

您可以使用
std::vector
,或者按照@Oli的建议使用
std::vector
。是的,你可以传递它,而不必复制全部内容

void f(std::vector<unsigned char> & byteArray) //pass by reference : no copy!
{
     //
}

std::vector<unsigned char>  byteArray;
//...
f(byteArray); //no copying is being made!
void f(std::vector&byteArray)//按引用传递:无副本!
{
//
}
std::矢量字节数组;
//...
f(拜特里)//禁止复制!

许多语言和框架提供了一个“字节数组”类型,但是C++标准库没有。

这里你错了,C++有一个字节数组类型:<代码> STD::vector < /C>,它的存储保证是连续的(如果你不需要这个条件,还有其他的选择)。您可能想阅读有关引用、移动语义、返回值优化和复制省略的内容,以了解如何有效地处理这些内容

注意:在C++语言中,一个字节是<代码> char < />代码(签名或无符号)。它可能不是8位长,您可以通过

CHAR\u bits
宏以位为单位获取其大小

许多语言和框架提供了一个“字节数组”类型,但是C++标准库没有。

这里你错了,C++有一个字节数组类型:<代码> STD::vector < /C>,它的存储保证是连续的(如果你不需要这个条件,还有其他的选择)。您可能想阅读有关引用、移动语义、返回值优化和复制省略的内容,以了解如何有效地处理这些内容


注意:在C++语言中,一个字节是<代码> char < />代码(签名或无符号)。它可能不是8位长,您可以通过

CHAR\u bits
宏获取它的位大小。

我建议使用
std::deque
而不是
std::vector
,因为后者需要连续的内存块。我将避免使用
new
分配大内存块,因为它将使用默认构造函数初始化内存块,这可能比您想要的要贵一点


在紧要关头,我相信您可以使用定制的deallocator定制
boost::shared_ptr
,这样您就可以使用
std::malloc
进行分配,从而避免初始化开销,并在保持
shared_ptr
带来的好处的同时释放
std::free
std::deque
而不是
std::vector
,因为后者需要连续的内存块。我将避免使用
new
分配大内存块,因为它将使用默认构造函数初始化内存块,这可能比您想要的要贵一点

在紧要关头,我相信您可以使用定制的deallocator定制
boost::shared_ptr
,这样您就可以使用
std::malloc
进行分配,从而避免初始化开销,并在保持
shared_ptr
带来的好处的同时,释放
std::free
对你来说很好。如果希望共享版本避免复制,可以使用以下方法:

typedef shared_ptr<vector<uint8_t>> ByteArray;
typedef共享\u ptr ByteArray;
如果在编译时知道大小,可以使用稍微节省空间的
array

另外,
string
可以处理空字符,空字符可能比vector更合适,也可能比vector更合适

一些扩展的实现有一个rope实现,这可能更合适。

vector
应该适合您的需要。如果希望共享版本避免复制,可以使用以下方法:

typedef shared_ptr<vector<uint8_t>> ByteArray;
typedef共享\u ptr ByteArray;
如果在编译时知道大小,可以使用稍微节省空间的
array

另外,
string
可以处理空字符,空字符可能比vector更合适,也可能比vector更合适


一些扩展的实现有一个rope实现,这可能更合适。

使用unique\u ptr来代替是有性能原因的,至少对于相对较大的缓冲区是这样的。有关详细信息,请参阅。

使用unique_ptr有性能方面的原因,至少对于相对较大的缓冲区。有关详细信息,请参见。

您需要什么(例如)一个
std::vector
不提供的?
std::array
vector
void f(const std::vector&vec);您可以在不复制内容的情况下将引用或指针(或智能指针)传递给向量。如果使用移动语义,则可以避免对向量的任何额外复制。您需要什么(例如,
std::vector
不提供的?
std::array
vector
void f(const std::vector&vec);您可以将引用或指针(或智能指针)传递到向量,而无需复制内容。如果使用移动语义,则可以避免对向量进行任何额外复制。请注意,
char
不是真正可靠的字节,因为它是有符号或无符号IIRC。@D.Shawley:是的,您不知道它是有符号还是无符号的。如果你想把数字理解为模2^n,最好是不带符号的。注意,
char
不是一个真正可靠的字节,因为它要么是带符号的,要么是不带符号的IIRC。@D.Shawley:是的,你不知道它是带符号的还是不带符号的