首页 文章
  • 4 votes
     answers
     views

    如何使用std :: copy直接从文件流读取到容器?

    我遇到了一个很酷的STL示例,它使用istream_iterators从std输入(cin)复制到向量 . vector<string> col1; copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(col)); 我如何做类似的事情从文件流直接读入...
  • 19 votes
     answers
     views

    将数据从fstream复制到stringstream而没有缓冲区?

    无论如何我可以将数据从 fstream (一个文件)传输到 stringstream (内存中的流)? 目前,我正在使用缓冲区,但这需要双倍的内存,因为您需要将数据复制到缓冲区,然后将缓冲区复制到字符串流,直到您删除缓冲区,数据在内存中重复 . std::fstream fWrite(fName,std::ios::binary | std::ios::in | std::ios::out); ...
  • 2 votes
     answers
     views

    std :: vector :: erase()(多线程)'Assertion `px != 0'失败 .

    与shared_ptr Assertion px != 0 failed相似 我正在编写一个游戏服务器,它会生成一个新线程来处理每个用户会话 . 主线程有一个UserSession共享指针的std :: vector . 另一个线程定期从此向量中删除死会话但在执行std :: vector :: erase()时失败 . 我无法找出生活中的错误 . 错误是: Prototype2:/usr/in...
  • 1 votes
     answers
     views

    如何填写加权图的邻接表?

    我正在尝试读取c中的文件并填充表示邻接列表的向量 . 该文件包含无向加权图的邻接列表表示 . 每行包含与该特定顶点相邻的节点元组以及长度那边缘 . 例如,第6行有6作为第一个条目,表示该行对应于标记为6的顶点 . 该行的下一个条目“141,8200”表示在顶点6和顶点141之间存在长度为8200的边缘该行的其余对表示与顶点6相邻的其他顶点和相应边的长度 . 文件例如: - 1 3,4 2,20 5...
  • 0 votes
     answers
     views

    通过c stl中的邻接列表正确实现图形

    我试图通过C的STL中的邻接列表来表示基本的无向图 . 这是我的代码: #include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int no_vertices,no_e...
  • 1 votes
     answers
     views

    我如何(C STL)抽象类的binary_search?

    可以使用STL二进制搜索算法(binary_search,upper_bound,lower_bound)来搜索派生对象的Base指针向量,如下所示 . 由于Base是抽象的(受保护的构造函数),因此必须为搜索函数实例化Derived对象,这有点难看 . 我想在给定时间内搜索第一个Derived的向量 . 我是否可以在不随意挑选和实例化我的许多继承类之一的情况下执行此操作? #include &l...
  • 18 votes
     answers
     views

    从上面找到矢量中最接近的值的优雅方式

    我需要一个函数,它接受一个向量(假定为已排序)和一个值,并返回[edit]大于小于或等于该数字的最接近的数字,最好使用STL中的算法 . 我已经提出了使用std :: lower_bound()的解决方案,但它看起来像kludgy和丑陋: struct ClosestCmp { bool operator()(const int & x, const int & y) { ...
  • 21 votes
     answers
     views

    stl vector并发读取线程安全吗?

    我正在开发一个应用程序,其中大量的线程需要迭代一组字符串值,并尝试将其自己的数据与列表中的可用数据进行匹配 . 我正在寻找以下用例: Vector初始化为几个std :: string类型的元素 . (可以说对象名是strList) . strList将在应用程序启动时初始化 . 所有线程将遍历strList以查看它的值是否与strList的至少一个元素匹配 . 没有线程会尝试修改...
  • 0 votes
     answers
     views

    在这种情况下比较std :: vector或std :: set的时间复杂度 - 更高效?

    我目前有一个返回字符串的函数 . 我需要跟踪这些返回的字符串,如果没有对返回的字符串执行操作,那么我必须对其执行操作 . 我的第一个想法是使用矢量(即)std :: vector . 这是利用矢量的机制看起来像什么 1 - 使用std :: find检查向量中是否存在项目 std::find(vector.begin(), vector.end(), item)!=vector.end() 2...
  • -3 votes
     answers
     views

    如何在向量中找到项目的位置?

    我想做的就是在向量中找到项目及其在向量中的位置,以便我可以在向量中执行操作(插入或删除) . 我已经尝试过std :: binarysearch,但它只是通过使用条件语句来告诉元素是否存在 . if(binarysearch(arr.begin(),arr.end(),98) { cout<<"98 exists in the vector"; } else ...
  • 18 votes
     answers
     views

    编写std :: vector vs plain数组的线程安全性

    我读过on Stackoverflow, none of the STL containers are thread-safe for writing . 但这在实践中意味着什么?这是否意味着我应该将可写数据存储在普通数组中? 我期望对 std::vector::push_back(element) 的并发调用可能导致数据结构不一致,因为它可能需要调整向量的大小 . 但是这样的情况呢,不涉及调整...
  • 124 votes
     answers
     views

    迭代时从STL集中删除元素

    我需要浏览一个集合并删除符合预定义条件的元素 . 这是我写的测试代码: #include <set> #include <algorithm> void printElement(int value) { std::cout << value << " "; } int main() { int initNum...
  • 5 votes
     answers
     views

    vector :: erase和reverse_iterator

    我在std :: vector中有一个元素集合,它们从第一个元素开始按降序排序 . 我必须使用向量,因为我需要将元素放在连续的内存块中 . 我有一个集合,其中包含许多具有所述特征的向量实例(总是按降序排序) . 现在,有时,当我发现我在更大的集合中有太多元素(持有这些向量的元素)时,我丢弃这些向量中的最小元素,类似于这个伪代码: grand_collection: collection that ...
  • 29 votes
     answers
     views

    std :: remove with vector :: erase和undefined behavior

    在整个网络上我看到人们使用erase/remove idiom为C矢量,如下所示: #include <vector> // the general-purpose vector container #include <iostream> #include <algorithm> // remove and remove_if int main() { //...
  • 130 votes
     answers
     views

    如果在从头到尾迭代时调用map元素上的erase()会发生什么?

    在下面的代码中,我遍历一个map并测试是否需要擦除一个元素 . 擦除元素并继续迭代是否安全,或者我是否需要在另一个容器中收集密钥并执行第二次循环来调用erase()? map<string, SerialdMsg::SerialFunction_t>::iterator pm_it; for (pm_it = port_map.begin(); pm_it != port_map.en...
  • 5 votes
     answers
     views

    根据索引删除矢量元素

    我想基于索引删除向量的元素,比如所有偶数索引元素 . 我已经阅读了关于擦除删除习惯用法,但看不到如何应用它 . 这是我试过的: vector<int> line; line.reserve(10); for(int i=0;i<10;++i) { line.push_back(i+1); } for(unsigned int i...
  • 1 votes
     answers
     views

    C矢量和插入

    STL容器的insert方法有两个参数:一个指示插入位置的迭代器和一个要插入的值 . 知道insert方法定义了在迭代器当前引用的值之前插入新插入的值 . 为什么不适合定义插入将新值放在当前值之后?
  • 10 votes
     answers
     views

    在输出和销毁之前按值对std :: map进行排序

    我'm aware that map is not prepared to be sorted. It' s针对快速和随机密钥访问进行了大量优化,实际上不支持 std::sort . 我目前的问题是我已经完整 map<std::string,int> ,我将不再使用了 . 我只需要在 value(int) 顺序中提取10对并销毁它 . 如果可能的话,最好的方法是将它排序到位,然后迭代...
  • 3 votes
     answers
     views

    std :: map :: rend()返回数组的第一个元素,而不是之前的元素

    我正在尝试通过std :: map反向迭代,遵循以下代码:http://www.cplusplus.com/reference/stl/map/rend/它说: rend()返回一个反向迭代器,引用映射容器中第一个元素之前的元素,这被认为是它的反向结束 . 请注意,rend不会引用与begin相同的元素,而是引用它之前的元素 . map<float,int> m; m.insert...
  • 3 votes
     answers
     views

    为什么命令std :: map和ordered std :: set不被邀请进行transaction_safe?

    众所周知,实验C中有Transactional Memory TS(ISO / IEC TS 19841:2015):Is it enough to declare a function as transaction_safe, so they can be used thread-safe? 并且 operator[] 仅对容器声明为 transaction_safe : std::vector...
  • 0 votes
     answers
     views

    C std :: map如何通过索引位置访问键

    我想在log(n)时间内使用C std::map 来访问与给定键相关联的值 . 由于 std::map 的键是排序的,从技术上讲,我可以按排序顺序中的位置访问键 . 我知道std :: map没有随机访问迭代器 . 是否有任何"map like"数据结构提供通过密钥的访问(通过使用[]运算符),并通过排序顺序中的密钥位置提供(只读)随机访问 . 这是一个基本的例子: my_f...
  • 1 votes
     answers
     views

    按键擦除STL std :: set元素时编译错误

    我有以下代码,其中我将一组std :: it迭代器保存到 int 的STL容器中,并按键擦除元素(其中键是STL容器的迭代器) . 如果容器是std :: vector,代码将按预期编译并运行(编译器是VC 2008),但如果容器是std :: list则无法编译 using namespace std; typedef vector< int > Container; //...
  • 8 votes
     answers
     views

    任何人都有一个很好的C共享内存容器?

    我一直渴望得到一个STLish容器,我可以放入共享内存段或内存映射文件中 . 我已经考虑使用自定义分配器和placement new将常规STL容器放入共享内存段 . (像这个ddj article) . 问题是STL容器内部会有指向他们拥有的内存的指针 . 因此,如果共享内存段或内存映射文件加载到不同的基址(可能在后续运行或第二个进程中),则内部指针突然无效 . 据我所知,自定义分配器方法只有...
  • 1 votes
     answers
     views

    将对象从unique_ptr数组移动到向量

    首先,我创建一个Foo对象的unique_ptr数组 . 然后我将对象移动到矢量,如下面的代码所示 . 但是这段代码没有编译 . 另一个问题是,因为对象是使用new运算符的数组版本分配的 . 如果发生异常并且在将对象移回unique_ptr数组之前程序必须提前终止会发生什么?在这种情况下,向量vec将使用delete运算符销毁其内容,而不是删除运算符的数组版本?我们如何解决这类问题? class ...
  • 0 votes
     answers
     views

    Intel Xeon Phi卸载代码STL向量

    我想将存储在STL向量中的数据复制到Intel Xeon Phi协处理器 . 在我的代码中,我创建了包含向量的类,其中包含计算所需的数据 . 我想在主机上创建类对象,也在主机上初始化数据,然后我想将此对象发送到协处理器 . 这是一个简单的代码,说明了我想做的事情 . 复制对象到协处理器向量后为空 . 有什么问题?怎么做得对? #pragma offload_attribute (push, tar...
  • 59 votes
     answers
     views

    如果增加一个等于STL容器的结束迭代器的迭代器,会发生什么

    如果我将迭代器指向向量的最后一个元素时,它会增加2怎么办?在this question询问如何通过2个元素调整STL容器的迭代器提供了两种不同的方法: 使用算术运算符的形式 - = 2或两次 或使用std :: advance() 当迭代器指向STL容器的最后一个元素或更远时,我用VC 7测试了它们的边缘情况: vector<int> vec; vec.push_back...
  • 34 votes
     answers
     views

    如何使向量元素独特? (删除不相邻的重复项)

    我有一个包含很少非相邻重复项的向量 . 举个简单的例子,考虑一下: 2 1 6 1 4 6 2 1 1 我试图通过删除不相邻的重复项并保持元素的顺序来使这个 vector 唯一 . 结果将是: 2 1 6 4 我尝试的解决方案是: 插入到std :: set但这种方法的问题是它会扰乱元素的顺序 . 使用std :: sort和std :: unique的组合 . 但同样的订单问题 . ...
  • 0 votes
     answers
     views

    键入decaying stl iterator

    假设我有一个返回一系列值的接口 . 该接口的实现可以使用不同的容器来提供这些数字 . class MyClassI { public: virtual std::pair<std::vector<int>::iterator, std::vector<int>::iterator> Numbers() const = 0; } class MyClassC...
  • -2 votes
     answers
     views

    输出存储在Map常量错误中的数据的问题

    大家好,感谢您花时间阅读这篇文章 . 我最近开始使用c并且正在尝试输出我存储在 Map 中的输出数据 . Map总共有四个值,一个值为密钥,另外三个是密钥中存储的信息 . 我使用以下结构来获取信息: struct fill_em_up{ // struct was created to manage the map data not the key double x; double y; doub...
  • 1 votes
     answers
     views

    在运行时将对象导入Unity3d / iOS VR程序

    我有一个概念性问题,可能正在咆哮错误的树 . 我对用于编写VR应用程序的Cardboard / Unity3d / iOS管道很感兴趣 . 我正在尝试制作一个非常基本的STL查看器 . 我想做的是将STL文件(可能是iCloud)导入应用程序以供查看 . 我正在学习Unity中的资产包作为将对象导入程序的方法 . 这个问题是它们必须在运行时之前准备好并具有特定的引用 . 有没有办法在运行时将STL...

热门问题