问题是如何将wstring转换为string? 我有下个例子: #include <string> #include <iostream> int main() { std::wstring ws = L"Hello"; std::string s( ws.begin(), ws.end() ); //std::cout <<"std::string = "<<s<<std::endl; std::wcout<<"std::wstring = "<<ws<<std::endl; std::cout <<"std::string = "<<s<<std::endl; } 输出注释掉的是: std::string = Hello std::wstring = Hello std::string = Hello 但没有只是: std::wstring = Hello 这个例子有什么不对吗? 我可以做如上所述的转换吗? 编辑 新的例子(考虑到一些答案)是 #include <string> #include <iostream> #include <sstream> #include […]
目前,我正在使用: DataTable dt = CreateDataTableInSomeWay(); List<DataRow> list = new List<DataRow>(); foreach (DataRow dr in dt.Rows) { list.Add(dr); } 有更好的/神奇的方法吗?
我将如何通过C ++中的std::map循环? 我的地图被定义为: std::map< std::string, std::map<std::string, std::string> > 例如,这可以保存这样的数据: m["name1"]["value1"] = "data1"; m["name1"]["value2"] = "data2"; m["name2"]["value1"] = "data1"; m["name2"]["value2"] = "data2"; m["name3"]["value1"] = "data1"; m["name3"]["value2"] = "data2"; 我怎样才能通过这个地图循环访问各种值?
C标准保证size_t是一个可以容纳任何数组索引的types。 这意味着,在逻辑上, size_t应该能够保存任何指针types。 我在Google上发现的一些网站上说,这是合法的和/或应该始终工作: void *v = malloc(10); size_t s = (size_t) v; 那么在C99中,标准引入了intptr_t和uintptr_ttypes,它们是有符号和无符号types,保证能够保存指针: uintptr_t p = (size_t) v; 那么使用size_t和uintptr_t什么区别呢? 两者都是无符号的,都应该能够容纳任何指针types,所以它们在function上看起来是一样的。 除了清晰度之外,有没有真正有说服力的理由使用uintptr_t (或更好的是void * )而不是size_t ? 在一个不透明的结构中,这个领域只能由内部function来处理,是否有理由不这样做? 同样的道理, ptrdiff_t是一个能够保存指针差异的签名types,因此能够保存大多数指针,所以它与intptr_t有什么不同呢? 并不是所有这些types基本上服务于相同function的普通不同版本? 如果没有,为什么? 我不能用其中一个做我不能用另一个做的事情? 如果是这样的话,为什么C99在语言中增加了两个基本多余的types? 我愿意忽视函数指针,因为它们不适用于当前的问题,但随意提及它们,因为我怀疑它们是“正确”答案的核心。
我不知道这是为什么发生,因为我认为我已经正确地声明和定义了一切。 我有以下程序,用模板devise。 这是一个简单的队列实现,成员函数为“add”,“substract”和“print”。 我已经在罚款“nodo_colaypila.h”中定义了队列的节点: #ifndef NODO_COLAYPILA_H #define NODO_COLAYPILA_H #include <iostream> template <class T> class cola; template <class T> class nodo_colaypila { T elem; nodo_colaypila<T>* sig; friend class cola<T>; public: nodo_colaypila(T, nodo_colaypila<T>*); }; 然后在“nodo_colaypila.cpp” #include "nodo_colaypila.h" #include <iostream> template <class T> nodo_colaypila<T>::nodo_colaypila(T a, nodo_colaypila<T>* siguiente = NULL) { elem = a; sig = siguiente;//ctor } 之后,队列模板类的定义和声明及其function如下: […]
所以我在一个非常大的代码库上工作,最近升级到gcc 4.3,现在触发这个警告: 警告:不推荐将string常量转换为“char *” 显然,解决这个问题的正确方法是find每个声明 char *s = "constant string"; 或函数调用如: void foo(char *s); foo("constant string"); 并使他们const char指针。 但是,这意味着至less要触及564个文件,这不是我希望在这个时候执行的任务。 现在的问题是,我正在运行-werror ,所以我需要一些方法来扼杀这些警告。 我怎样才能做到这一点?
任何人都可以打败我的整数的性能std ::string代码,下面链接? 已经有几个问题解释了如何在C ++中将整数转换为std::string ,比如这个 ,但是没有一个提供的解决scheme是有效的。 下面是一些编译就绪的代码,用于与一些常见的方法进行竞争: 使用stringstream的“C ++方法”: http : //ideone.com/jh3Sa sprintf,这是SO-ers通常推荐的性能意识: http : //ideone.com/82kwR 与stream行的观点相反, boost::lexical_cast有它自己的实现( 白皮书 ),不使用stringstream和numeric插入操作符。 我真的很希望看到它的performance比较,因为这个问题表明它是悲惨的 。 和我自己的贡献一样,这在台式计算机上是有竞争力的,并且演示了一种在embedded式系统上也可以全速运行的方法,与依赖于整数模的algorithm不同: 本的algorithm: http : //ideone.com/SsEUW 如果你想使用这个代码,我会在一个简单的BSD许可下使用它(允许商业使用,需要归属)。 请问。 最后,函数ltoa是非标准的,但广泛可用。 ltoa版本,对于任何有编译器的人来说(ideone没有): http ://ideone.com/T5Wim 我会尽快发表我的performance测量作为答案。 algorithm规则 提供将至less32位有符号和无符号整数转换为十进制的代码。 将输出生成为std::string 。 没有与线程和信号不兼容的技巧(例如,静态缓冲区)。 您可以假设一个ASCII字符集。 确保在绝对值无法表示的二进制补码机上testingINT_MIN上的代码。 理想情况下,输出应该是character-for-character与使用stringstream的规范C ++版本相同的,但是也可以通过http://ideone.com/jh3Sa来理解,因为正确的数字也是可以理解的。 新 :虽然你可以使用任何编译器和优化器的选项(除了完全禁用),你需要进行比较,至less在VC ++ 2010和g ++下,代码也需要编译并给出正确的结果。 希望讨论 除了更好的algorithm之外,我还想在几个不同的平台和编译器上获得一些基准(让我们使用MB / s吞吐量作为我们的标准测量单位)。 我相信我的algorithm的代码(我知道sprintf基准testing使用了一些快捷方式 – 现在已经修复了)是标准定义好的行为,至less在ASCII假设下是这样,但是如果您看到任何未定义的行为或input输出无效,请指出。 […]
在系统托盘中运行Windows Forms应用程序需要做什么? 不是可以最小化托盘的应用程序,而是仅存在于托盘中的应用程序,只有一个图标,工具提示和“右键单击”菜单。
我已经编程了一段时间,但主要是Java和C#。 我从来没有必要自己pipe理记忆。 我最近开始使用C ++进行编程,对于什么时候应该将东西存储在堆栈以及何时将其存储在堆中,我有点困惑。 我的理解是,被频繁访问的variables应该被保存在堆栈中,对象,很less使用的variables和大型的数据结构都应该被保存在堆中。 这是正确的还是我不正确?
我试图通过它的构造函数创build一个typesT的新对象添加到列表中时。 我得到一个编译错误:错误信息是: 'T':创buildvariables实例时不能提供参数 但是我的类有一个构造参数! 我怎样才能做这个工作? public static string GetAllItems<T>(…) where T : new() { … List<T> tabListItems = new List<T>(); foreach (ListItem listItem in listCollection) { tabListItems.Add(new T(listItem)); // error here. } … }