草庐IT

vector_c

全部标签

c++ - 如何用字符串文字优雅地初始化 vector<char *>?

问题来自C++Primer5thEdition上的一个练习:Writeaprogramtoassigntheelementsfromalistofchar*pointerstoC-stylecharacterstringstoavectorofstrings.----------------原始问题------------首先,我尝试了以下比较直接的方法:vectorvec={"Hello","World"};vec[0][0]='h';但是编译代码时我收到警告:temp.cpp:11:43:warning:deprecatedconversionfromstringconstantt

c++ - 删除动态分配的 vector 会清除它的内容吗

假设我有:vector*foo=newvector();我向其中添加了大量内容,使用它,然后我只需调用:deletefoo;我需要先调用foo.clear();吗?或者delete会调用析构函数。请不要评论这个愚蠢的行为,我知道至少应该在这里使用自动指针。此行为存在于我正在使用的代码库中,超出了我修复它的范围。 最佳答案 是的,vector的析构函数将被调用,这将清除其内容。delete在取消分配内存之前调用析构函数,vector的析构函数隐式调用.clear()(如您所知,让自动存储持续时间vector超出范围)。这很容易测试,使

c++ - c++ 中 std::vector 的 ArrayList 样式 indexOf?

我从Java进入C++,并且有一个常见的设计情况,在这种情况下我有一个元素(非基本元素)我想从std::vector中删除。在Java中,我会这样写:arrayList.remove(arrayList.indexOf(myClassInstance));在C++中,使用std::vector,最好/最高效/最干净的方法是什么?我能想到的最好的办法是创建一个对我正在搜索的实例的引用,然后遍历vector直到找到该引用。本质上,将vector中每个元素的内存地址与引用进行比较,直到找到匹配项。我在正确的轨道上吗?或者有更好的方法吗?(也许使用了不同的标准容器,到目前为止我只使用了std:

c++ - std::vector::push_back 不可复制对象给出编译器错误

我在g++(GCC)4.7.2上遇到编译错误但不在MSVC-2012当试图std::vector::push_back不可复制(私有(private)复制构造函数)但可移动的对象。对我来说,我的示例看起来与SO和其他地方的许多其他示例相同。错误消息使它看起来像是结构不是“可直接构造”的问题-我不知道这意味着什么,所以我加倍不确定为什么对象需要“可直接构造”才能被推回。#include#includestructMyStruct{MyStruct(std::unique_ptrp);MyStruct(MyStruct&&other);MyStruct&operator=(MyStruct

c++ - 使用指向 <Employee> vector 的唯一指针 vector

对于一项学校作业,我试图使用指向Employee对象的唯一指针vector来访问Employee数据,但无法找出语法/编译器错误。谁能告诉我我做错了什么?必须以这种方式使用智能指针vector。这里是适用的代码://CreateanEmployeeEmployeeEmpRec;//Assignvaluetoauniqueptrunique_ptrTempEmp;*TempEmp=EmpRec;//Createavectorofunique_ptrvector>EmpVect;//PushtheTempEmppointerontothevectorEmpVect.push_back(Te

c++ - 使用 remove_if 按索引从 C++ vector 中删除

我们可以在C++中使用remove_if,根据对元素进行操作的谓词,在线性时间内从vector中删除元素。boolcondition(doubled){...}vectordata=...std::remove_if(data.begin(),data.end(),condition);如果我的条件不取决于值,而是取决于指数怎么办?换句话说,如果我想删除所有奇数索引元素,或一些任意索引集等?boolcondition(intindex){//returnswhetherthisindexshouldberemoved}vectordata=...std::remove_if(data.

c++ - 线程安全 vector

首先让我说,我已经阅读了关于该主题的大部分SO和其他主题。我理解的方式是,std::vector将在推回新项目时重新分配内存,这是我的情况,除非我预留了足够的空间(这是不是我的情况)。我拥有的是一个std::shared_ptrvector,该vector包含唯一对象(或者更准确地说,是指向vector中唯一对象的指针)。通过指针对这些对象的处理被包装在工厂和处理程序类中,但是指向对象的指针可以从包装类外部访问,并且可以修改成员值。任何时候都不会发生删除。如果我正确理解了之前关于std::vector和线程安全的SO问题中提出的问题,添加(push_back)新对象可能会使之前的指针无

c++ - 对一对 vector 进行排序

我知道如何对vector对进行排序,但是如何对vector对进行排序?我可以考虑在一对vector上编写一个自定义的“虚拟”迭代器并对其进行排序,但这看起来很复杂。有没有更简单的方法?C++03中有吗?我想使用std::sort.当处理一些在硬件中生成的数据时会出现这个问题,其中一对数组比成对的数组更有意义(从那时起就会有各种步幅和对齐问题)。我意识到,否则保留一对vector而不是一对vector将是一个设计缺陷(数组结构问题)。我正在寻找一种快速的解决方案,将数据复制到成对的vector然后再复制回来(我会将其返回给HW以进行更多处理)不是一种选择。例子:keys={5,2,3,1

c++ - 为什么 vector<int> 在以下情况下比 vector<bool> 快

这个现象是我在LeetCode题目N-Queens编程时发现的.我有两个版本的可接受代码,唯一的区别是我存储哈希表的方式,一个是使用vector另一个正在使用vector.具体来说,两个版本的代码如下:版本1,vector,运行时间:4毫秒classSolution{public:voiddfs(vector&crtrst,vector>&finalrsts,introw,vector&mup,vector&m45dgr,vector&m135dgr){intn=crtrst.size();if(row==n){finalrsts.push_back(crtrst);return;}f

c++ - 为什么 std::find for vector 返回一个迭代器而不是整数位置

为什么vector查找返回的是迭代器而不是整数值?vector::iteratoritr1=std::find(words.begin(),words.end(),word); 最佳答案 std::find适用于各种容器,而不仅仅是std::vector。例如,它适用于std::list但该容器不允许通过索引访问元素(至少不容易)。为了让它与所有类型的容器一起工作,它需要返回所有容器都能理解的东西,一个迭代器。编辑:如果你想找到相当于给定迭代器的索引位置,你可以使用std::distance.例如:std::distance(std