我想熟悉标准模板库的使用。如果我看到1995-97年左右出版的一般引用或初学者指南,我可以依赖其中的信息吗?在过去的十几年里,STL发生了多大的变化? 最佳答案 是的!有新的补充。TR1更新现已在大多数环境中实现。您的旧书对于学习基础知识仍然很有用。但是您会希望找到TR1的引用资料以了解一些非常有用的新功能。在几个方面,新功能优于旧功能。(想到的是bind1st和bind2nd功能完全封装在更通用的绑定(bind)结构中。)此外,还有boost库。(boost.org)Boost是一个库的集合,有些非常有用,有些则晦涩难懂。TR1中
#include#include#includeusingnamespacestd;structFoo{inti;doubled;Foo(inti,doubled):i(i),d(d){}intgetI()const{returni;}};intmain(){vectorv;v.push_back(Foo(1,2.0));v.push_back(Foo(5,3.0));vectoris;transform(v.begin(),v.end(),back_inserter(is),mem_fun_ref(&Foo::getI));return0;}有没有更简洁的方法来访问成员变量然后使用我
学习STL我写了一个简单的程序来测试仿函数和修饰符。我的问题是关于使用CLASS或STRUCT编写仿函数并尝试使用函数适配器对其进行操作的区别。据我在C++中的理解,CLASS和STRUCT之间的区别在于,在最后一种情况下,默认情况下成员是公共(public)的。这也是我在该站点的答案中多次阅读的内容。所以请解释为什么即使我在尝试使用not2修饰符时将所有成员(只是一个函数重载())声明为public,这段短代码也会编译失败。(我还没有尝试过其他修饰符,例如粘合剂)#include#include#include#includeusingnamespacestd;templatevoi
在类中声明operatorstd::string时,operatorbool()怎么会导致错误,而且它本身还充当到string的隐式转换?#include#includeusingnamespacestd;classTest{public:operatorstd::string(){cout 最佳答案 您面临的问题(除了operatorstd::string()返回bool之外)是隐式转换在您需要和不需要时触发。当编译器看到s=t时,它会识别以下潜在的std::operator=匹配项://usingstd::stringforco
我们目前正在为某个库构建API。部分接口(interface)需要库获取并返回给用户类,如vector、string。当尝试在简单场景中模拟库的使用时,在Debug模式下,系统会在将字符串作为输入传递时崩溃。我相信在调试或Release模式下字符串类有不同的表示。然后我们的库假设接收到某种表示,错误地读取数据成员并一路崩溃。那么在API中传输STL对象的最佳方法是什么。目标操作系统是使用MSVC8编译的WindowsXP,尽管库用户将使用Windows,但他们的编译器可能(并且可能会)不同到目前为止我们的想法:将字符串更改为char*-但开发人员可能会对释放内存的责任感到困惑。使用我们
在对转换后的字符串执行一些操作后,我遇到了double的问题。#include#include#includeusingnamespacestd;//conversionfunctionvoidconvert(constchar*a,constinti,double&out){doubleval;istringstreamin(a);in>>val;cout并非所有以字符串形式输入的数字都是这种情况,因此错误不是恒定的。它只影响一些数字(34.38似乎是常数)。目前,当我传入a=34.38和i=100时,它会返回:chara--34.38Val-----34.38modifiedval
当我使用迭代器时,我遇到了一个问题,似乎是对const的某种隐式转换。我不太确定哪个代码是相关的(如果我知道我可能不会问这个问题!)所以我会尽力说明我的问题。typedefsetContainer;//notconstvoidLargeObject::someFunction(){//notconstContainer::iteratorit;//notconstfor(it=c.begin();it!=c.end();++it){//assumecisa"Container"(*it).smallObjectFunction();//notaconstfunction}}但是我总是得
我必须为每个变量存储3个字符串,但不知道在C++中哪个是最好的数据结构。我只能想到Struct,但不确定这是否是最好的方法。类似于stringvar[100][3],第一维(100)应该动态添加和删除。我用map、多map尝试了各种各样的事情。感谢任何帮助。谢谢 最佳答案 如果您总是将恰好3个字符串放在一个三元组中,并且想要有多个三元组,则定义具有三个字符串的结构并将其放入std::vector。structTriplet{std::stringa,b,c;};std::vectordata;
以下代码片段在我的编译器(visualstudio)上始终返回true。但这种行为是否定义明确且可移植?boolreturn_always_true(std::stringconst&str){returnstr.find("")!=std::string::npos;}intmain(){cout 最佳答案 我找到了cppreference.com比标准更容易阅读。引用他们:Findsthefirstsubstringequaltostr...Formally,asubstringstrissaidtobefoundatposit
为什么我要将C++operator()重载为全局函数而不是成员函数。例如,==运算符。为什么要这样做?例如在STL库中。 最佳答案 通常的规则是将左侧对象修改为成员和返回新对象的二元运算符是免费的职能;后者的主要动机是因为编译器不会转换左侧以匹配成员;如果你的类(class)支持任何隐式转换,然后是所有常见的二进制运算符应该是自由函数,以便应用相同的转换规则对于左侧和右侧,例如:classComplex{public:Complex(doubler,doublei=0.0);booloperator==(Complexconst&o