草庐IT

vector_tostr

全部标签

c++ - 按值返回 std::vector

人们常说,在C++11中,按值返回std::vector是明智的。在C++03中这主要是正确的,因为RVO应该优化掉拷贝。但这应该吓跑了大多数开发人员。在C++11中,返回的std::vector局部变量是否总是被move?如果该vector是局部变量而不是局部变量本身的成员怎么办?显然不会move返回的全局变量。还有哪些情况不会搬家? 最佳答案 首先,以前每次可以省略拷贝,现在仍然可以省略,在相同情况下可以省略move。对于这篇文章的其余部分,我将假设由于某种原因不会发生省略(假设编译器编写者很懒惰)。InC++11willare

c++ - 如何将 N 个整数读入 vector ?

如果我想从标准输入读取所有个整数到vector,我可以使用方便:vectorv{istream_iterator(cin),istream_iterator()};但假设我只想读取n整数。手写循环是我得到的一切吗?vectorv(n);for(vector::size_typei=0;i>v[i];或者有没有更多的右手方法可以做到这一点? 最佳答案 您通常不应该对std::copy_n这样做。,它假定提供的迭代器在增加n次时仍然有效:Copiesexactlycountvaluesfromtherangebeginningatfir

c++ - vector::emplace_back 用于具有私有(private)构造函数的对象

我希望仅通过Timer::create()创建我的Timer对象。为此,我将构造函数设为私有(private)。但是,在new_allocator.h的上下文中,我收到一个编译器错误,指出“Timer::Timer(unsignedint)'是私有(private)的”。我该如何解决这个问题?classTimer{private:inttimeLeft;Timer(unsignedintms):timeLeft(ms){}public:staticstd::vectorinstances;staticvoidcreate(unsignedintms){instances.emplace

c++ - 如何使用 C++11 可变参数模板来定义由 vector 元组支持的元组 vector ?

假设我有一堆vector:vectorv1;vectorv2;vectorv3;长度相同。现在,对于每个索引i,我希望能够将(v1[i],v2[i],v3[i])视为一个元组,并可能传递它。事实上,我想要一个元组vector而不是vector元组,我可以使用它来完成上述操作。(在C语言中,我可能会说结构数组而不是数组结构)。我不想影响任何数据重新排序(想想:真的很长的vector),即新vector由我传入的各个vector支持。让我们。现在,我希望我编写的类(称为ToVBackedVoT,因为没有更好的名称)支持任意选择vector来支持它(不仅仅是3,不是int、double和in

c++ - C/C++ 中简单快速的矩阵 vector 乘法

我需要经常使用matrix_vector_mult()将矩阵乘以vector,下面是它的实现。问题:有没有一种简单的方法可以显着加快速度至少两倍?备注:1)矩阵大小约为300x50。期间不变跑。2)它必须在Windows和Linux上都可以运行。doublevectors_dot_prod(constdouble*x,constdouble*y,intn){doubleres=0.0;inti;for(i=0;i 最佳答案 这是理论上一个好的编译器应该自己做的事情,但是我尝试使用我的系统(g++4.6.3)并通过手动展开4次乘法(大

c++ - 嵌套列表(字符串 vector 的 vector )初始化失败

这段代码:#include#include#includeclassMyClass{public:MyClass(conststd::vector>&v){std::cout输出这个(VisualStudio2017):Vectorofstringvectorssize:1Vector#0hassize1Vectorofstringvectorssize:4Vector#0hassize97Vector#1hassize0Vector#2hassize0Vector#3hassize0Vectorofstringvectorssize:1Vector#0hassize2Vectorof

c++ - 错误,符号 'vector' 无法解析

我在linux中使用eclipse开发一个c++应用程序,我从以下代码行中收到此编辑器注释错误“无法解析符号'vector'”std::vectorbuffer;我觉得某些库丢失或路径未设置。我明确下载了STL,但它没有用。我必须在我的linux上重新安装GCC吗? 最佳答案 在Eclipse中,右键单击项目名称...选择Index...Rebuild。 关于c++-错误,符号'vector'无法解析,我们在StackOverflow上找到一个类似的问题: h

c++ - 是否可以在运行时迭代 mpl::vector 而不实例化 vector 中的类型?

一般来说,我会使用boost::mpl::for_each()遍历boost::mpl::vector,但这需要一个带有模板函数的仿函数,声明如下:templatevoidoperator()(T&){T::staticCall();}我的问题是我不希望对象T被for_each实例化。.我不需要operator()中的T参数一点也不。有没有办法做到这一点,或者for_each的替代方法?不会将T类型的对象传递给模板函数?理想情况下,我希望operator()定义如下所示:templatevoidoperator()(){T::staticCall();}当然,我不希望T在调用之前被实例

c++ - vector 中的线程无法连接

我想将一组线程存储在一个vector中,并在退出我的程序之前将它们全部加入。无论我在集合中放置多少个线程,尝试加入第一个线程时都会收到以下错误:system_error:thread::joinfailed:Nosuchprocess下面是一些简单的代码来演示我的问题:#include#include#include#includeusingstd::cout;usingstd::endl;usingstd::vector;usingstd::thread;usingstd::mem_fn;intmain(){vectorthreads(1);threads.push_back(thr

c++ 在已知位置插入 vector

我希望在已知位置插入c++vector。我知道c++库有一个insert()函数,它接受一个位置和要插入的对象,但位置类型是一个迭代器。我希望像插入数组一样插入vector,使用特定的索引。 最佳答案 这应该做你想做的。vectormyVec(3);myVec.insert(myVec.begin()+INTEGER_OFFSET,DATA);请注意,当vector重新分配时,迭代器可能会失效。请看这个site.编辑:我不确定为什么另一个答案消失了……但是另一个人提到了以下内容:myVec.insert(INDEX,DATA);如果