Tag: stl

按降序排列vector

我应该使用 std::sort(numbers.begin(), numbers.end(), std::greater<int>()); 要么 std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators 按降序排列vector? 一种方法或另一种方法有什么好处或缺点?

为什么我不能写string,而我*可以*写入string对象?

如果我定义下面的东西, char *s1 = "Hello"; 为什么我不能做下面的事情, *s1 = 'w'; // gives segmentation fault …why??? 如果我做下面的事情怎么办 string s1 = "hello"; 我可以做下面的事吗, *s1 = 'w';

比较来自不同容器的迭代器

比较不同容器的迭代器是否合法? std::vector<int> foo; std::vector<int> bar; expression式foo.begin() == bar.begin()产生错误或未定义的行为? (我正在写一个自定义的迭代器,并且在实现operator==时候偶然发现了这个问题。)

STLvector和线程安全

假设我有一个N个元素的向量,但是这个向量的n个元素都有有意义的数据。 一个更新程序线程更新第n个或第n + 1个元素(然后设置n = n + 1),还检查n是否太接近于N,并在必要时调用vector :: resize(N + M)。 更新之后,线程调用多个子线程读取第n个数据并进行一些计算。 确保子线程永远不会更改或删除数据(实际上没有数据被删除),更新程序在完成更新后立即调用子线程。 到目前为止,没有发生任何问题,但是我想问一下如果在上一次更新之前还有一些子工作线程,向量重新分配给更大的内存块时是否会出现问题。 或者在这种multithreading的情况下使用向量是安全的,因为它不是线程安全的? 编辑:因为只有插入发生时更新调用vector::resize(N + M,0),有没有任何可能的解决scheme,我的问题? 由于STL向量的良好性能,我不愿意用一个可locking向量来replace它,或者在这种情况下是否有任何高性能,已知和无锁向量?

如何使用结构和比较函数向量的std :: sort?

感谢在C中的解决scheme ,现在我想在C ++中使用std :: sort和vector来实现: typedef struct { double x; double y; double alfa; } pkt; vector< pkt > wektor; 用push_back()填充; 比较function: int porownaj(const void *p_a, const void *p_b) { pkt *pkt_a = (pkt *) p_a; pkt *pkt_b = (pkt *) p_b; if (pkt_a->alfa > pkt_b->alfa) return 1; if (pkt_a->alfa < pkt_b->alfa) return -1; if […]

C ++ std :: set线程安全吗?

我有一个关于std :: set的线程安全性的问题。 据我所知,我可以遍历一个集合,并添加/擦除成员,并不会使迭代器无效。 但请考虑以下情况: 线程“A”遍历一组shared_ptr <Type> 线程“B”偶尔会将项目添加到此集合中。 程序运行时,我遇到了段错误,我不知道为什么发生这种情况。 缺乏线程安全的原因是什么?

std ::引用对

有一个std::pair引用std::pair是否有效? 特别是,分配操作员有问题吗? 根据这个链接 ,运营商似乎没有特别的处理,所以默认的分配运营商将无法生成。 我想要有一pair<T&, U&>并且能够为它分配另一对(值或引用)并修改指向的对象。

为什么C ++允许将一个整数分配给一个string?

今天在程序中我遇到了一个有趣的情况,那就是我无意中把一个无符号的整数赋给了std :: string。 VisualStudio C ++编译器没有给出任何警告或错误,但是当我运行这个项目时,我碰巧注意到了这个错误,并且给了我的string垃圾字符。 这是代码的样子: std::string my_string(""); unsigned int my_number = 1234; my_string = my_number; 下面的代码也编译好: std::string my_string(""); unsigned int my_number = 1234; my_string.operator=(my_number); 以下结果是一个错误: unsigned int my_number = 1234; std::string my_string(my_number); 到底是怎么回事? 编译器如何用最后一个代码块停止构build,而是让前两个代码块构build?

标准库对自动分配有什么保证?

C ++ 11标准对于标准库的自动分配有什么意义? 更具体一些,如果有的话,什么是selfAssign保证什么? template<class T> std::vector<T> selfAssign(std::vector<T> v) { v = std::move(v); return v; }

迭代器和指针如何相关?

带有迭代器的代码看起来非常像带指针的代码。 迭代器是一些模糊的types(例如std::vector<int>::iterator )。 我没有得到的是迭代器和指针是如何相互关联的 – 迭代器是一个包装指针的重载操作,以推进到相邻的元素还是别的东西?