我需要带有潜在的很多元素的C ++向量,擦除重复项,并对其进行分类。 我目前有下面的代码,但它不起作用。 vec.erase( std::unique(vec.begin(), vec.end()), vec.end()); std::sort(vec.begin(), vec.end()); 我怎样才能正确地做到这一点? 另外,首先删除重复项(类似于上面的代码)还是先执行sorting? 如果我首先执行sorting,它是否保证在执行std::unique之后保持sorting? 还是有另一种(也许更有效)的方式来做到这一点?
我有一个类,它适应std :: vector模型的特定于域的对象的容器。 我想将大部分std :: vector API暴露给用户,以便他/她可以在容器上使用熟悉的方法(大小,清除,等等)和标准algorithm。 这在我的devise中似乎是一个重复出现的模式: class MyContainer : public std::vector<MyObject> { public: // Redeclare all container traits: value_type, iterator, etc… // Domain-specific constructors // (more useful to the user than std::vector ones…) // Add a few domain-specific helper methods… // Perhaps modify or hide a few methods (domain-related) }; 我意识到在重用类实现时宁愿合成inheritance的做法 – 但是这是有限制的! […]
我有点困惑push_back和emplace_back之间的区别。 void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); 由于有一个push_back超载取右值引用,我不明白emplace_back的目的是什么?
好吧,这真的很难承认,但我现在有一个强大的诱惑,从std::vectorinheritance。 我需要大约10个定制的vectoralgorithm,我希望它们是vector的直接成员。 但是,我自然也想拥有std::vector接口的其余部分。 那么,作为一个守法的公民,我的第一个想法是在MyVector类中有一个std::vector成员。 但是,我将不得不手动提供所有的std :: vector的接口。 键入的太多了。 接下来,我想到了私有inheritance,所以我不会using std::vector::member方法,而是在公共部分using std::vector::member 。 实际上这也很乏味。 在这里,我真的认为我可以简单地从std::vector公开inheritance,但是在文档中提供了一个警告,这个类不应该被多态使用。 我认为大多数开发人员都有足够的能力去理解这个不应该被多态地使用。 我的决定是绝对无理的吗? 如果是这样,为什么? 你可以提供一个替代scheme,其他成员实际上是成员,但不涉及重新input所有的vector接口? 我怀疑,但如果可以的话,我只会很开心。 此外,除了一些白痴可以写类似的事实 std::vector<int>* p = new MyVector 使用MyVector有没有其他现实的危险? 通过说现实我放弃像想象一个函数,需要一个指针向量… 那么,我已经说明了我的情况。 我犯罪了。 现在是由你来原谅我或不:)
我一直在阅读关于C ++的STL容器,特别是关于STL及其容器的部分。 现在我明白每一个人都有自己的特定属性,而且我已经接近了记住他们所有的人……但是我还没有把握的是在哪种情况下他们都被使用了。 什么是解释? 示例代码非常喜欢。
我想使用擦除方法从vector中清除元素。 但是这里的问题是元素不能保证在向量中只出现一次。 它可能会出现多次,我需要清除所有这些。 我的代码是这样的: void erase(std::vector<int>& myNumbers_in, int number_in) { std::vector<int>::iterator iter = myNumbers_in.begin(); std::vector<int>::iterator endIter = myNumbers_in.end(); for(; iter != endIter; ++iter) { if(*iter == number_in) { myNumbers_in.erase(iter); } } } int main(int argc, char* argv[]) { std::vector<int> myNmbers; for(int i = 0; i < 2; ++i) { myNmbers.push_back(i); myNmbers.push_back(i); } erase(myNmbers, 1); return […]
有人把这篇文章引起了我的注意,声称(我是释义) STL术语被滥用来引用整个C ++标准库,而不是从SGI STL获取的部分。 (…)它是指“STL”,尽pipe事实上很less有人仍然使用STL(这是在SGIdevise的)。 C ++标准库的一部分是基于STL的一部分,这些部分是很多人(包括几个作者和臭名昭着的cplusplus.com)仍然被称为“STL”。 但是,这是不准确的。 事实上,C ++标准从来没有提到“STL”,两者之间有内容差异。 (…)“STL”很less用于引用恰好基于SGI STL的stdlib的位。 人们认为这是整个标准库。 它被放在简历上。 这是误导。 我对C ++的历史几乎一无所知,所以我不能判断文章的正确性。 我是否应该避免使用术语STL? 或者这是一个孤立的意见?
如何sorting包含自定义(即用户定义)对象的vector。 应该使用标准的STLalgorithm和一个谓词(一个函数或一个函数对象),它们将在自定义对象中的一个字段上操作(作为sorting的关键)。 我在正确的轨道上?
为什么在标准容器中使用std::auto_ptr<>是错误的?
我必须使用sprintf格式化std::string并将其发送到文件stream中。 我该怎么做?