我注意到有效的STL vector是默认应该使用的序列的types。 这是什么意思? 似乎忽略效率vector可以做任何事情。 任何人都可以向我提供一个场景, vector不是一个可行的select,但必须使用list ?
这个程序有什么问题? #include <memory> #include <vector> int main() { std::vector<std::unique_ptr<int>> vec; int x(1); std::unique_ptr<int> ptr2x(&x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } 错误: $ g++ -std=gnu++0x main.cpp In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c+ +/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c+ +/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c+ +/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: I n member function 'void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp […]
如何将类对象,特别是STL对象传递给C ++ DLL? 我的应用程序必须以DLL的forms与第三方插件进行交互,而且我无法控制这些插件所用的编译器。 我知道STL对象没有保证ABI,我担心导致我的应用程序不稳定。
std::swap()被许多std容器(如std::list和std::vector )在sorting和分配时使用。 但是,对于自定义types, swap()的标准实现是非常普遍的,而且效率很低。 因此,通过使用自定义types特定的实现来重载std::swap()可以获得效率。 但是,你怎么能实现它,所以它会被使用的性病容器?
在下面的代码中,我通过一个映射循环,testing一个元素是否需要被擦除。 清除元素并继续迭代是否安全?还是需要将密钥收集到另一个容器中,然后执行第二个循环来调用erase()? map<string, SerialdMsg::SerialFunction_t>::iterator pm_it; for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++) { if (pm_it->second == delete_this_id) { port_map.erase(pm_it->first); } } 更新:当然,我然后读这个问题 ,我不认为会相关,但回答我的问题。
显然;-)标准容器提供了某种forms的保证。 什么types的保证和不同types的容器之间的差异究竟是什么? 从SGI网页 (关于STL )工作,我想出了这个: Container Types: ================ Container: Forward Container Reverse Container Random Access Container Sequence Front Insert Sequence Back Insert Sequence Associative Container Simple Associative Container Pair Associative Container Sorted Associative Container Multiple Associative Container Container Types mapped to Standard Containers ============================================= std::vector: Sequence Back Sequence Forward/Reverse/Random Container std::deque: Sequence Front/Back Sequence Forward/Reverse/Random […]
我想知道为什么我不能使用用户定义类的STL地图。 当我编译下面的代码,我得到这个神秘的错误消息。 这是什么意思? 另外,为什么只发生在用户定义的types? (原始types用于密钥时是可以的) C:\ MinGW \ bin .. \ lib \ gcc \ mingw32 \ 3.4.5 …….. \ include \ c ++ \ 3.4.5 \ bits \ stl_function.h ||在成员函数`bool std :: less <_Tp> :: operator()(const _Tp&,const _Tp&)const [with _Tp = Class1]': C:\ MinGW \ bin .. \ lib \ gcc \ mingw32 \ […]
采取以下两行代码: for (int i = 0; i < some_vector.size(); i++) { //do stuff } 和这个: for (some_iterator = some_vector.begin(); some_iterator != some_vector.end(); some_iterator++) { //do stuff } 我被告知第二种方式是首选。 为什么呢?
我使用下面的代码来testingc++ <random>库。 为什么每次运行编译的可执行文件都得到完全相同的序列? rd()在编译时是确定的吗? 每次运行如何获得不同的输出? 在Windows 7 64bit上的GCC 4.8.1。 使用来自http://nuwen.net/mingw.html的 MinGW发行版 编辑:我用Visual Studiotesting了相同的代码。 没有问题。 输出是不确定的。 这可能是在我使用的mingw gcc 4.8.1中的一个bug。 #include <iostream> #include <random> using namespace std; int main(){ random_device rd; mt19937 mt(rd()); uniform_int_distribution<int> dist(0,99); for (int i = 0; i< 16; ++i){ cout<<dist(mt)<<" "; } cout <<endl; }
由于在cppreference上没有这样的API,所以我发现更新操作很麻烦 。 所以我现在做的是这样的: //find element in set by iterator Element copy = *iterator; … // update member value on copy, varies Set.erase(iterator); Set.insert(copy); 基本上由Set返回的迭代器是一个const_iterator,你不能直接改变它的值。 有没有更好的方法来做到这一点? 或者,也许我应该重写创build自己的(我不知道它是如何工作的)