Tag: stl

如何从std :: map过滤项目?

我大致有以下代码。 这可以做得更好或更有效率? 也许使用std::remove_if ? 你能移走地图中的物品吗? 我们可以避免使用临时地图吗? typedef std::map<Action, What> Actions; static Actions _actions; bool expired(const Actions::value_type &action) { return <something>; } void bar(const Actions::value_type &action) { // do some stuff } void foo() { // loop the actions finding expired items Actions actions; BOOST_FOREACH(Actions::value_type &action, _actions) { if (expired(action)) bar(action); else actions[action.first]=action.second; } } actions.swap(_actions); […]

STL删除不能按预期工作?

int main() { const int SIZE = 10; int a[SIZE] = {10, 2, 35, 5, 10, 26, 67, 2, 5, 10}; std::ostream_iterator< int > output(cout, " "); std::vector< int > v(a, a + SIZE); std::vector< int >::iterator newLastElement; cout << "contents of the vector: "; std::copy(v.begin(), v.end(), output); newLastElement = std::remove(v.begin(), v.end(), 10); cout << […]

C ++将vector <int>转换为vector <double>

将std::vector<int> intVec为std::vector<double> doubleVec的好方法是什么? 或者更一般地说,转换两种可转换types的向量?

跟踪指数的c ++sorting

你有一些有效的例程返回数组与索引sorting元素在数组中? 我认为使用stl向量存在一些方便的方法。 你是否已经实现了一个没有stl的高效的algorithm,或者你是否有伪代码或者C ++代码? 感谢致敬

擦除和删除之间的区别

我对std :: removealgorithm的用法有点混淆。 具体来说,我无法理解当我使用这种algorithm时被删除的内容。 我写了一个这样的小testing代码: std::vector<int> a; a.push_back(1); a.push_back(2); std::remove(a.begin(), a.end(), 1); int s = a.size(); std::vector<int>::iterator iter = a.begin(); std::vector<int>::iterator endIter = a.end(); std::cout<<"Using iter…\n"; for(; iter != endIter; ++iter) { std::cout<<*iter<<"\n"; } std::cout<<"Using size…\n"; for(int i = 0; i < a.size(); ++i) { std::cout<<a[i]<<"\n"; } 两种情况下的产量都是2,2。 但是,如果我使用擦除删除像这样的东西: a.erase(std::remove(a.begin(), a.end(), 1), a.end()); 我得到的输出为2。 所以我的问题是: […]

如何初始化“const std :: vector <T>”类似于ac数组

有没有一种优雅的方式来创build和初始化一个const std::vector<const T>像const T a[] = { … }到一个固定的(和很小的)数值? 我需要经常调用一个函数,期望一个vector<T> ,但是这些值在我的情况下永远不会改变。 原则上我想到了类似的东西 namespace { const std::vector<const T> v(??); } 因为v不会在这个编译单元之外使用。

c ++exception:抛出std :: string

我想抛出一个exception,当我的C ++方法遇到奇怪的东西,不能恢复。 抛出一个std::string指针可行吗? 以下是我期待的事情: void Foo::Bar() { if(!QueryPerformanceTimer(&m_baz)) { throw new std::string("it's the end of the world!"); } } void Foo::Caller() { try { this->Bar(); // should throw } catch(std::string *caught) { // not quite sure the syntax is OK here… std::cout << "Got " << caught << std::endl; } }

在C ++中是否有生产就绪的无锁队列或哈希实现?

我已经在C ++中使用了一个非locking的队列。 我发现了一些代码和一些试验 – 但我没有能够编译。 无锁哈希也是受欢迎的。 总结:到目前为止,我没有正面的答案。 没有“生产准备”库,而且现有的库都不符合STL容器的API。

如何在我的dll界面或ABI中使用标准库(STL)类?

在导出一个包含stl类的类与Visual Studio警告C4251有关的几个问题之前:例如这个问题或这个问题。 我已经阅读了UnknownRoad的优秀解释。 一味地禁用警告似乎有点危险,虽然它可能是一个选项。 包装所有这些std类并导出这些也不是一个真正的select。 毕竟它被称为标准模板库…也就是说,我们想要提供一个与这些标准类的接口。 我如何在我的dll界面中使用stl-classes? 什么是常见的做法?

如何在GDB中打印C ++向量的元素?

我想在GDB中检查一个std::vector的内容,我该怎么做呢? 为了简单起见,我们假设它是一个std::vector<int> 。