#include <list> using std::list; int main() { list <int> n; n.push_back(1); n.push_back(2); n.push_back(3); list <int>::iterator iter = n.begin(); std::advance(iter, n.size() – 1); //iter is set to last element } 还有什么其他的方法可以让列表中的最后一个元素?
我有这样一个std::map : map<wstring,int> Scores; 它存储玩家的名字和分数。 当有人得分时,我会简单地做: Scores[wstrPlayerName]++; 当映射中没有元素的wstrPlayerName键wstrPlayerName它会创build一个,但是在增量之前是否初始化为零或空值,还是未定义? 我应该testing如果元素每增加一次之前是否存在?
我使用std::string的find()方法来testing一个string是否是另一个string的子string。 现在我需要不区分大小写的相同的东西。 对于string比较,我总是可以转向stricmp()但似乎没有stristr() 。 我已经find了各种答案,大多数人build议使用Boost ,在我的情况下,这不是一个选项。 另外,我需要支持std::wstring / wchar_t 。 有任何想法吗?
我正在寻找最优雅的方式来把一个stringvector插入到一个string中。 以下是我现在使用的解决scheme: static std::string& implode(const std::vector<std::string>& elems, char delim, std::string& s) { for (std::vector<std::string>::const_iterator ii = elems.begin(); ii != elems.end(); ++ii) { s += (*ii); if ( ii + 1 != elems.end() ) { s += delim; } } return s; } static std::string implode(const std::vector<std::string>& elems, char delim) { std::string s; return implode(elems, delim, […]
使用gdb进行debugging,任何使用STL / boost的c ++代码仍然是一个噩梦。 任何使用STL的gdb都知道这一点。 例如,请参阅代码中的一些debugging会话的示例运行。 我试图通过收集提示来减轻痛苦。 能否请您对我在下面收集的提示发表意见(尤其是您已经使用过哪些build议,以及对build议的更改) – 我列出了提示是技术性降序。 有人使用“斯坦福GDB STL实用程序”和“UCF GDB实用程序” ? 是否有一些这样的使用提升数据结构? 上面的utils似乎不是可recursion使用的,例如在一个命令中以可读的方式打印boost :: shared_ptr的向量。 编写你的.gdbinit文件。 包括例如C ++相关的美化器,列在UCF GDB utils的底部。 使用选中/debuggingSTL / Boost库,如STLport。 使用日志logging(例如这里所描述的) 更新 :GDB有一个新的C ++分支 。
一般来说,在C ++中存储二进制数据的最好方法是什么? 就我所知,这些选项几乎可以归结为使用string或向量<char>。 (我会省略char * s和malloc()的可能性,因为我特指C ++)。 通常我只是使用一个string,但是我不确定是否有我缺less的开销,或者STL在内部执行的转换可能会混淆二进制数据的完整性。 有没有人有任何指针(har)呢? build议或喜好这样或那样?
如何使用find方法更新std::map中的键的值? 我有一个像这样的映射和迭代器声明: map <char, int> m1; map <char, int>::iterator m1_it; typedef pair <char, int> count_pair; 我正在使用地图来存储一个字符的出现次数。 我正在使用Visual C ++ 2010。
我写了一小段代码,我必须根据向量元素中的值,将值插入到某个地方的C ++ STL向量中。 我正在使用insert()函数来完成此操作。 我意识到,当我想添加一个新的元素到vector的末尾,我可以简单地使用push_back() 。 但为了保持我的代码看起来不错,我想独占地使用insert() ,它将所需的插入点和要插入的值之后的迭代器指向元素。 如果作为参数传入的迭代器的值是v.end() ,其中v是我的向量,这将与push_back()一样工作吗? 非常感谢!
我试过这个问题的代码C ++ std :: transform()和toupper()..为什么这会失败? #include <iostream> #include <algorithm> int main() { std::string s="hello"; std::string out; std::transform(s.begin(), s.end(), std::back_inserter(out), std::toupper); std::cout << "hello in upper case: " << out << std::endl; } 从理论上讲,它应该是Josuttis书中的例子之一,但它不能编译http://ideone.com/aYnfv 。 为什么GCC抱怨: no matching function for call to 'transform( __gnu_cxx::__normal_iterator<char*, std::basic_string <char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string <char, std::char_traits<char>, std::allocator<char> > […]
我听到很多人说,如果在容器中预期的元素数量相对较less,最好使用std::vector而不是std::map eventhough我只使用容器来查找而不是迭代。 这背后的真正原因是什么? 显然,map的查找性能不会比vector小(尽pipe可能是纳秒/微秒),这与内存使用情况有关系吗? 在虚拟地址空间的碎片化过程中,vector比地图更好还是更差? 我正在使用与Visual Studio(即微软实施)一起的STL库这是否与其他实现有什么不同?