Articles of stl

内存被推入向量后损坏

为什么内存被推入向量后被损坏。 在下面的程序中,我有一个stringvar的结构(它不是一个指针)。 我每次创build一个本地结构对象,并分配一个string值并推送到向量。 推到vector后,我正在对本地结构对象进行更改。 但是这种变化正在反映在向量结构对象的string数据中。 #include <iostream> #include <vector> #include <string> #include <memory.h> using namespace std; void PushVector(string); struct thread_info { int id; string threadname; bool bval; }; std::vector<thread_info> myvector; int main () { PushVector("Thread1"); // valid data into vector PushVector("Thread2"); struct thread_info print; while(!myvector.empty()) { for(unsigned int index = 0; index < myvector.size(); ++index […]

为什么ostringstream在multithreading环境下无法正常工作

也许有些奇怪。 当我在我的multithreading环境中使用STL ostringstream类时,我发现每个线程的执行时间随着线程数的增加而线性增加。 我不知道为什么发生这种情况。 我尝试检查ostringstream源代码,但无法find任何同步代码。 在ostringsstream中有没有同步的地方? 我用snprintfreplaceostringsstream,性能大幅提高。 我的操作系统是RHEL5.4 64BIT,我的服务器上有两个至强5620 CPU。 以下是运行结果我分别使用1和8个线程1000000个循环。 左列是threadid,右边是运行时间。 因此,随着线程数量的增加,每个线程的运行时间也随之增加。 [host]$./multi_thread 1 1000000 1115760960:0.240113 [host]$./multi_thread 8 1000000 1105004864:8.17012 1115494720:8.22645 1125984576:8.22931 1136474432:8.41319 1094252864:8.73788 1167944000:8.74504 1157454144:8.74951 1146964288:8.75174 代码列表如下 #include <iostream> #include <sstream> using namespace std; void * func(void * t) { int n = *((int *) t); pthread_t pid = pthread_self(); timeval t1, t2; […]

STL容器内存问题

我正在用gcc 4.3.2在linux(Fedora 10和CentOS 5)中实现我自己的图库,并使用STL容器,然后我发现内存有问题。 当我build立我的图表时,我使用了足够多的内存来查看顶部或另一个内存使用工具。 我确定我正在释放内存(我一遍又一遍地检查了代码,并使用了valgrind来检查内存泄漏),但内存仍然在使用中(我可以在顶部或cat / proc / meminfo中查看)而当我再次创buildgraphics时,它不会增加内存使用量,显然重新使用分配的内存。 经过几天的debugging,我创build了一个非常简单的代码,有同样的问题。 #include <iostream> #include <list> // Object that occupies 128KB. // Data is not important. class MyObject { public: int * a; int * b; int * c; int * d; MyObject( ) { a = new int[ 8192 ]; b = new int[ 8192 […]

优化C ++二维数组

我需要一种方法来表示C ++中的双精度二维数组(密集matrix),并具有绝对最小的访问开销。 我已经在各种linux / unix机器和gcc版本上做了一些时机。 STLvectorvector,声明如下: vector<vector<double> > matrix(n,vector<double>(n)); 并且通过matrix[i][j]进行访问比访问声明的数组慢5%到100% double *matrix = new double[n*n]; 通过内联索引函数matrix[index(i,j)] ,其中index(i,j)计算结果为i + n * j。 其他不用STL排列二维数组的方法 – 一个n指针数组指向每一行的开始,或者定义堆栈上的整个事物为一个常数大小的matrix[n][n] – 几乎完全相同速度为指标函数法。 当开启优化时,最近的GCC版本(> 4.0)似乎能够将STLvector向量编译成几乎与非STL代码相同的效率,但这有点依赖于机器。 我想尽可能使用STL,但是必须select最快的解决scheme。 有没有人有任何与GCC优化STL的经验?

unique_ptr编译错误

如果我告诉你我不能把它编译出来,我觉得这很尴尬。 你能帮我吗? #include<memory> using namespace std; int main() { std::unique_ptr<int> p1(new int(5)); return 0; } $ gcc main.cpp main.cpp: In function 'int main()': main.cpp:6:2: error: 'unique_ptr' was not declared in this scope main.cpp:6:13: error: expected primary-expression before 'int' main.cpp:6:13: error: expected ';' before 'int' $ gcc –version gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1

eclipse中的unique_ptr自动完成

我在玩unique_ptr。 在我的最后一篇文章中,人们帮助我在编译期间通过指定-std = c ++ 0x来编译使用这个指针的程序。 现在我想知道是否有任何方法来指示日食考虑c + + 11自动完成? unique_ptr不在std :: namespace列表中,也不能find与unique_ptr关联的方法(reset,move …)。 谢谢你vahid

std :: normal_distribution <double>导致错误的命令窗口与Linux?

任何人来访问这个问题? 每1实现不需要产生相同的数据。 在实践中呢 – arm,x86,free和commercial编译器在STL实现方面有很多不同吗? // g++ –std=c++11 -oa minimal.cpp && ./a #include <iostream> #include <random> using namespace std; int main() { std::mt19937_64 gen; gen.seed(17); cout << "\nNormal\n"; normal_distribution<double> distr1; for (int i = 0; i < 2; i++) { double delay = distr1(gen); printf(" Value = %15.15g\n", delay); } return(0); } /* Results (1) […]

用C ++为OSX创build共享库

我刚刚开始用C ++编程,而且我意识到我一直不得不一遍又一遍地编写相同的代码(主要是实用程序函数)。 所以,我试图创build一个共享库并将其安装在PATH中,以便我可以在需要时使用这些效用函数。 以下是我迄今为止所做的: 用以下内容创build一个文件utils.h : – #include<iostream> #include<string> std::string to_binary(int x); 使用以下内容创build一个文件utils.cpp : – #include "utils.h" std::string to_binary(int x) { std::string binary = ""; while ( x > 0 ) { if ( x & 1 ) binary += "1"; else binary += "0"; x >>= 1; } return binary; } 按照这里提到的步骤: – http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-two-dynamic-libraries/ […]

在C ++中处理UTF-8

要了解C ++是否是我的项目的正确语言,我想testingUTF-8的function。 根据参考资料,我build立了这个例子: #include <string> #include <iostream> using namespace std; int main() { wstring str; while(getline(wcin, str)) { wcout << str << endl; if(str.empty()) break; } return 0; } 但是当我input一个UTF-8字符时,它会出错: $ > ./utf8 Hello Hello für f $ > 不仅不打印ü ,而且还会立即退出。 gdb告诉我没有崩溃,但是一个正常的退出,但我觉得很难相信。

使用检查的STL实现,任何可用的免费?

你用过一个检查过的STL实现吗? 有没有发现你不期待的错误? 有没有我可以在Linux上免费试用?