在C#中花了相当长的时间开发之后,我注意到如果为了将其用作接口而声明抽象类,则不能实例化此抽象类的向量来存储子类的实例。 #pragma once #include <iostream> #include <vector> using namespace std; class IFunnyInterface { public: virtual void IamFunny() = 0; }; class FunnyImpl: IFunnyInterface { public: virtual void IamFunny() { cout << "<INSERT JOKE HERE>"; } }; class FunnyContainer { private: std::vector <IFunnyInterface> funnyItems; }; 在MS VS2005中声明抽象类向量的行会导致这个错误: error C2259: 'IFunnyInterface' : cannot instantiate abstract class 我看到一个明显的解决方法,即用下面的代替IFunnyInterface: […]
std::list<Node *> lst; //…. Node * node = /* get from somewhere pointer on my node */; lst.remove(node); std :: list :: remove方法调用每个被删除元素的析构函数(和可用内存)吗? 如果是的话,我该如何避免呢?
我正在查看stl向量的API文档,并注意到向量类中没有方法可以删除具有特定值的元素。 这似乎是一个普遍的操作,似乎有些奇怪,没有内置的方式来做到这一点。
当我尝试在我的Android NDK项目(使用NDK r5b,最新版本)中包含任何类似vector的C ++类时,出现如下错误… Compile++ thumb : test-libstl <= test-libstl.cpp /Users/nitrex88/Desktop/Programming/EclipseProjects/STLTest/jni/test-libstl.cpp:3:18: error: vector: No such file or directory 在网上报道这个问题的其他人已经声称增加了成功 APP_STL := stlport_static 到他们的Application.mk文件。 我已经完成了这个以及APP_STL的其他所有可能的值。 我清理了项目,运行ndk-build clean,删除了obj和libs文件夹,而且当我编译它时,却找不到vector类。 我已经在这里工作了几个星期(因为NDK r5出来了),如果有人有任何build议,我会很感激。 谢谢!
Multimap本质上具有按键sorting的数据组。 我想要一个方法,我可以访问这些个人群体,并获得他们的总值。 例如,在一个std::multimap< string, int >我的商店 {"Group1", 1}, {"Group1", 2}, {"Group1", 3}, {"Group2", 10}, {"Group2", 11}, {"Group2", 12} 已经存储这些值,我应该能够迭代这个多图,并获得每个“组”的聚合值。 问题是在STL中没有定义任何以这种方式访问MultiMaps的函数。 我可以使用lower_bound , upper_bound手动迭代multimap和总计组的内容,但我希望能有更好的方法已经在STL中定义? 任何人都可以提出一个解决scheme,我怎样才能得到上面的例子中的一个组的聚合值。
这是我出来的可能的方式之一: struct RetrieveKey { template <typename T> typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map<int, int> m; vector<int> keys; // Retrieve all keys transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey()); // Dump all keys copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n")); 当然,我们也可以通过定义另一个函子RetrieveValues来从地图中检索所有的值。 有没有其他方法可以轻松实现? (我总是想知道为什么std :: map不包括我们这样做的成员函数。)
假设我有一个大小为N的std::vector (我们称之为myVec )。 构造由元素X到Y的副本组成的新向量的最简单方法是什么?其中0 <= X <= Y <= N-1? 例如, myVec [100000]通过myVec [100999]中的一个大小为150000的向量。 如果这不能有效地完成一个向量,是否有另一个我应该使用的STL数据types呢?
寻找std::vector中所有元素总和的好方法是什么? 假设我有一个有几个元素的向量std::vector<int> vector 。 现在我想find所有元素的总和。 同样的方法有什么不同?
在我写我自己之前,我会问你们所有人。 我正在寻找一个几乎完全像STL向量的C ++类,但将数据存储到堆栈中的一个数组中。 某种types的STL分配器类也可以工作,但我试图避免任何堆,甚至静态分配每个线程堆(虽然其中之一是我的第二select)。 堆栈效率更高。 对于使用vector的当前代码来说,它几乎是一个代替。 对于我正要写自己,我正在想这样的事情: char buffer[4096]; stack_vector<match_item> matches(buffer, sizeof(buffer)); 或者类可以有内部分配的缓冲区空间。 然后它会看起来像: stack_vector<match_item, 256> matches; 我以为它会抛出std :: bad_alloc,如果它运行的空间,尽pipe这不应该发生。 更新 使用Chromium的stack_container.h很好用! 我没有想到这样做自己的原因是我一直忽略了对STL集合构造函数的allocator对象参数。 我已经使用了模板参数几次做静态池,但我从来没有看到代码或写任何实际使用的对象参数。 我学到了一些新东西。 很酷! 该代码有点混乱,由于某些原因,GCC强迫我将分配器声明为实际项目,而不是将其构造成向量的分配器参数。 它从这样的东西: typedef std::pair< const char *, const char * > comp_list_item; typedef std::vector< comp_list_item > comp_list_type; comp_list_type match_list; match_list.reserve(32); 对此: static const size_t comp_list_alloc_size = 128; typedef std::pair< […]
试图编译下面的代码我得到这个编译错误,我能做什么? ISO C ++禁止采用非限定或带括号的非静态成员函数的地址来形成指向成员函数的指针。 class MyClass { int * arr; // other member variables MyClass() { arr = new int[someSize]; } doCompare( const int & i1, const int & i2 ) { // use some member variables } doSort() { std::sort(arr,arr+someSize, &doCompare); } };