Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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
向量<;字符串>;或向量<;共享\u ptr<;字符串>&燃气轮机;在c++;14 旧的C++风格,在构建大的向量时,我经常使用向量> Stry>P>Trase>字符串> > >代码> >向量>字符串> >代码>,以避免内存拷贝。 C++ 11以来,C++有 rValue/COD>和Stase语义;我现在可以使用vector吗 我使用GCC 7.1.0和CLAN 3.6,用C++ 14选项。 < P>有几种情况,使用矢量或矢量< /代码>可以帮助优化C++ 11之前的性能: 向向量添加元素时,例如调用push_back()。 旧行为:如果向量容量不够大,内部 内存缓冲区将被重新分配,所有旧对象将被重新分配 复制到新缓冲区 C++11行为:如果向量元素类型具有非抛出移动构造函数,则调用它而不是复制构造函数std::string具有非抛出移动构造函数,因此在std::vector的push_back()中,应该不会比std::vector慢 从函数返回作为局部变量的向量时 旧行为:如果从函数或方法返回局部变量,则复制结果。在某些有限的情况下,编译器可以执行返回值优化—直接在调用方的堆栈上分配对象 C++11行为:如果返回值为右值,则调用向量的move构造函数。这个操作实际上非常便宜(只需交换两个指针)。因此,对于int,使用std::vector也适用于这种情况 在不同向量之间共享字符串_C++_C++11 - Fatal编程技术网

向量<;字符串>;或向量<;共享\u ptr<;字符串>&燃气轮机;在c++;14 旧的C++风格,在构建大的向量时,我经常使用向量> Stry>P>Trase>字符串> > >代码> >向量>字符串> >代码>,以避免内存拷贝。 C++ 11以来,C++有 rValue/COD>和Stase语义;我现在可以使用vector吗 我使用GCC 7.1.0和CLAN 3.6,用C++ 14选项。 < P>有几种情况,使用矢量或矢量< /代码>可以帮助优化C++ 11之前的性能: 向向量添加元素时,例如调用push_back()。 旧行为:如果向量容量不够大,内部 内存缓冲区将被重新分配,所有旧对象将被重新分配 复制到新缓冲区 C++11行为:如果向量元素类型具有非抛出移动构造函数,则调用它而不是复制构造函数std::string具有非抛出移动构造函数,因此在std::vector的push_back()中,应该不会比std::vector慢 从函数返回作为局部变量的向量时 旧行为:如果从函数或方法返回局部变量,则复制结果。在某些有限的情况下,编译器可以执行返回值优化—直接在调用方的堆栈上分配对象 C++11行为:如果返回值为右值,则调用向量的move构造函数。这个操作实际上非常便宜(只需交换两个指针)。因此,对于int,使用std::vector也适用于这种情况 在不同向量之间共享字符串

向量<;字符串>;或向量<;共享\u ptr<;字符串>&燃气轮机;在c++;14 旧的C++风格,在构建大的向量时,我经常使用向量> Stry>P>Trase>字符串> > >代码> >向量>字符串> >代码>,以避免内存拷贝。 C++ 11以来,C++有 rValue/COD>和Stase语义;我现在可以使用vector吗 我使用GCC 7.1.0和CLAN 3.6,用C++ 14选项。 < P>有几种情况,使用矢量或矢量< /代码>可以帮助优化C++ 11之前的性能: 向向量添加元素时,例如调用push_back()。 旧行为:如果向量容量不够大,内部 内存缓冲区将被重新分配,所有旧对象将被重新分配 复制到新缓冲区 C++11行为:如果向量元素类型具有非抛出移动构造函数,则调用它而不是复制构造函数std::string具有非抛出移动构造函数,因此在std::vector的push_back()中,应该不会比std::vector慢 从函数返回作为局部变量的向量时 旧行为:如果从函数或方法返回局部变量,则复制结果。在某些有限的情况下,编译器可以执行返回值优化—直接在调用方的堆栈上分配对象 C++11行为:如果返回值为右值,则调用向量的move构造函数。这个操作实际上非常便宜(只需交换两个指针)。因此,对于int,使用std::vector也适用于这种情况 在不同向量之间共享字符串,c++,c++11,C++,C++11,如果您打算返回集合的副本,而不是复制元素,那么这是std::vector仍然有用的唯一方法。但是在这种情况下,我的建议是在集合之间共享不可变的对象,即使用std::vector我不知道为什么不能在前面使用vector。当向量容量增加时,您是否担心开销?这要看情况而定。您在向量和其他地方同时保留一个副本的频率有多高,其生命周期可能比向量中的元素长?但是vector似乎有点多,这意味着对字符串的每次访问都有3个解引用是的,您可以使用std::vector。你可以做很多事情。是的,由于C++11,向量

如果您打算返回集合的副本,而不是复制元素,那么这是
std::vector
仍然有用的唯一方法。但是在这种情况下,我的建议是在集合之间共享不可变的对象,即使用
std::vector

我不知道为什么不能在前面使用
vector
。当向量容量增加时,您是否担心开销?这要看情况而定。您在向量和其他地方同时保留一个副本的频率有多高,其生命周期可能比向量中的元素长?但是
vector
似乎有点多,这意味着对字符串的每次访问都有3个解引用是的,您可以使用
std::vector
。你可以做很多事情。是的,由于C++11,向量将移动其字符串,而不是复制,因此在调整向量大小时,您不必担心昂贵的复制。如果使用
std::vector
,则意味着无论何时将向量复制到新实例(
vector1=vector2
),它都会带来数据,你不能避免在那里复制。这个概念与仅持有指针的std::vector完全不同。rvalue和semantics仅在移动数据而不进行不必要的复制时对您有所帮助,但您一次只能让1
std::vector
保存这些数据。要了解更多关于rvalue的信息,我推荐这篇很棒的帖子: