草庐IT

STL-string

全部标签

C++ STL vector 迭代器与索引访问和线程安全

我正在迭代一个STLvector并从中读取值。还有另一个线程可以更改此vector。现在,如果另一个线程从vector中插入或删除元素,它会使迭代器无效。不使用涉及的锁。我选择通过索引(方法1)代替迭代器(方法2)访问容器是否使其线程安全?性能怎么样?structA{inti;intj;};方法一:size_ts=v.size();//vcontainspointerstoobjectsoftypeAfor(size_ti=0;ii++;}方法二:std::vector::iteratorbegin=v.begin();std::vector::iteratorend=v.end();

c++ - 在 STL 优先级队列 C++ 中实现 decreaseKey

我正在尝试实现Prim算法,为此我需要为优先级队列设置一个decreaseKey方法(以更新优先级队列中的键值)。我可以在STL优先级队列中实现它吗?如果有帮助,这是我正在遵循的算法:对于图G中的每个顶点u将u的键设置为INFINITY将你的父级设置为NIL将源顶点的键设置为0使用上述键将图中所有顶点入队到优先级队列Q当Q不为空时用Q中最低的键弹出顶点u对你的每个相邻顶点v做如果(v仍在Q中)和(key(u)+weight-function(u,v)设置你为v的父级将v的键更新为相等的键(u)+权重函数(u,v)//这部分给我带来了问题,因为我不知道如何在优先级队列中实现decreas

c# - __declspec(dllexport)::vector <std::string>

我一直在努力弄清楚如何将字符串数组从C++DLL返回到C#应用程序,但我对如何执行此操作或在非常基础的级别上查找文章感到困惑。假设我有下面的代码。如何修复粗体线:extern"C"{__declspec(dllexport)intGetANumber();//unsureonthisline:**__declspec(dllexport)::vectorListDevices();**}extern::vectorGetStrings(){vectorseqs;returnseqs;}externintGetANumber(){return27;}谢谢马特

c++ - swig 对基类 'std::string' 一无所知,忽略

我正在尝试使用swig围绕C++库构建ruby​​包装器。其中大部分似乎都有效,但我有一个问题,我很确定与上述警告有关。看起来我正在包装的类之一是从std::string继承的。我在运行swig时看到上面的警告消息。当我在应该返回字符串的ruby​​对象上调用方法时,我看到了这个SWIG::Type_p_std__string:0x.....我在想我需要解决上面的警告,让它起作用,有什么想法吗? 最佳答案 SWIG提示它不知道std::string类,因此无法为其生成代码。SWIG库std_string.i具有用于将C++字符串映射

c++ - 什么时候在 C++ 程序的开头使用 '#include <string>'?

我对#include的使用感到困惑在程序的开始。例如,在下面的代码中,我不使用#include但该函数在运行时仍会打印出字符串“Johnny'sfavoritenumberis”。#includeusingnamespacestd;voidprintVariable(intnumber){cout但是,在下面的代码中,它确实包含#include.#include#includeusingnamespacestd;classVar{public:voidsetName(stringx){name=x;}stringgetName(){returnname;}private:stringn

c++ - STL priority_queue<pair> 与 map

我需要一个优先级队列来存储每个键的值,而不仅仅是键。我认为可行的选择是std::multi_map因为它按键顺序迭代,或std::priority_queue>因为它在V之前在K上排序。除了个人偏好之外,我有什么理由更喜欢另一个吗?它们真的一样吗,还是我漏掉了什么? 最佳答案 优先级队列最初是在O(N)时间内排序的,然后以降序迭代所有元素需要O(NlogN)时间。它存储在std::vector中在幕后,所以在大O行为之后只有很小的系数。不过,其中一部分是在vector内部移动元素。如果sizeof(K)或sizeof(V)很大,会慢

c++ - 从 std::stringstream 传递 std::string 引用作为参数

我正在使用std::stringstream构造一个字符串,然后尝试将完成的字符串作为对函数的引用传递,该函数将std::string&作为参数。我在GCC上遇到编译错误:../src/so.cpp:22:21:error:invalidinitializationofnon-constreferenceoftype‘std::string&{akastd::basic_string&}’fromanrvalueoftype‘std::basic_stringstream::__string_type{akastd::basic_string}’../src/so.cpp:12:6:e

c++ - 采用 `std::string` 的显式构造函数得到 `char*` 并且工作正常

将StringBuilder构造函数标记为显式我想我不能传入char*但似乎我可以,因为它编译得很好。classStringBuilder{public://StringBuilder(constchar*);explicitStringBuilder(std::strings){}};intmain(){StringBuilders1("hello");StringBuilders2(std::string("hello"));}http://cpp.sh/6uomq 最佳答案 basic_string采用字符指针的构造函数不是e

c++ - C++ 中的分配器用法(STL 树)

我最近一直在尝试了解C++分配器的工作原理,并且一直在寻找STL库用于类似std::set之类的红黑树的实现。或std::map,但有些事情我无法理解。首先要做的是从容器必须存储的类型转换分配器-_Val-树使用的节点类型-_Rb_tree_node-使用重新绑定(bind)模板:typedeftypename__gnu_cxx::__alloc_traits::templaterebind>::other_Node_allocator;typedef__gnu_cxx::__alloc_traits_Alloc_traits;这个我可以解决。现在,当一个元素被插入并且它需要创建一个新

c++ - 由于对具有 std::string 的方法的 undefined reference ,链接 webrtc-native 时出错

我正在尝试构建webrtc版本62,使用以下内容1.gitcheckout-bbranch62refs/remotes/branch-heads/622.gngenout_release_62/x64/Debug--args="rtc_include_tests=falsertc_use_h264=falseuse_rtti=trueis_component_build=falseenable_iterator_debugging=falseenable_nacl=falsetarget_os=\"linux\"target_cpu=\"x64\"is_debug=true"3.nin