Tag: stl

如何更改C ++ STL向量的特定元素

vector<int> l; for(int i=1;i<=10;i++){ l.push_back(i); } 现在,例如, 如何将vector的5th element更改为-1 ? 我试过l.assign(4, -1); 这不像预期的那样。 没有其他的vector方法似乎适合。 我使用了vector,因为我需要在我的代码中使用随机访问function(使用l.at(i) )。

在地图元素上使用for_each

我有一个地图,我想在每个数据types对象成员函数上执行调用。 我还知道如何在任何序列上做到这一点,但有可能在关联容器上做到这一点? 我能find的最接近的答案是: Boost.Bind访问std :: for_each中的std :: map元素 。 但是我不能在我的项目中使用boost,所以,有没有一个STL的替代品,我错过了提高::绑定? 如果不可能的话,我想创build一个指向数据对象的临时序列,然后在它上面调用for_each,如下所示: class MyClass { public: void Method() const; } std::map<int, MyClass> Map; //… std::vector<MyClass*> Vector; std::transform(Map.begin(), Map.end(), std::back_inserter(Vector), std::mem_fun_ref(&std::map<int, MyClass>::value_type::second)); std::for_each(Vector.begin(), Vector.end(), std::mem_fun(&MyClass::Method)); 它看起来太混乱,我不太喜欢它。 有什么build议么?

用std :: map使用两个键的最好方法是什么?

我有一个std ::我用来存储x和y坐标的值。 我的数据非常稀less,所以我不想使用数组或向量,这会导致大量的内存浪费。 我的数据范围从-250000到250000,但我最多只有几千点。 目前我创build一个std ::string与两个坐标(即“12×45”),并将其用作关键。 这似乎不是最好的方式来做到这一点。 我的其他想法是使用一个int64,并将两个int32s移入它并将其用作一个键。 或者使用两个坐标的类。 什么是要被用作关键的类的要求? 做这个的最好方式是什么? 我宁愿不使用地图的地图。

将vector复制到STL列表的最佳方法是什么?

使用迭代器迭代遍历vector,并复制到列表的最佳复制方法。 任何build议?

如何使vector元素独特? (删除不相邻的重复项)

我有一个载体,包含less数不相邻的重复项。 作为一个简单的例子,考虑: 2 1 6 1 4 6 2 1 1 我试图通过删除不相邻的重复项和维护元素的顺序使这个vector唯一。 结果将是: 2 1 6 4 我尝试的解决scheme是: 插入一个std ::集合,但这种方法的问题是,它会扰乱元素的顺序。 使用std :: sort和std :: unique的组合。 但是同样的顺序问题。 手动重复消除: Define a temporary vector TempVector. for (each element in a vector) { if (the element does not exists in TempVector) { add to TempVector; } } swap orginial […]

是否有一个可读的STL实现?

我在Linux上; 看着STL标题; 他们真的很复杂。 在某个地方,是否有一个STL的核心function较小的版本,但实际上是可读的? 谢谢!

我如何估计std :: map的内存使用情况?

例如,我有一个已知sizeof(A)和sizeof(B)的std :: map,而map里面有N个条目。 你如何估计它的内存使用量? 我会说这是类似的 (sizeof(A) + sizeof(B)) * N * factor 但是,这个因素是什么? 不同的公式可能? 也许要求上限更容易?

std :: map如何提供一个常量size()操作?

我知道所有的容器提供了一个恒定的size()操作,除了forward_list 。 但是如何map ,其内部数据结构是红黑树,提供了size()的复杂度? 像vector和string的其他人一样。 他们使用柜台吗? 如果是这样,为什么不forward_list ? 当我读这本书的C ++标准库时,我感到困惑:一个教程和参考 。

复制std :: vector:喜欢分配或std :: copy?

我有两个向量: std::vector<int> v1, v2; // Filling v1 … 现在我需要将v1复制到v2 。 有没有什么理由更喜欢 v2 = v1; 至 std::copy (v1.begin(), v1.end(), v2.begin()); (或相反亦然)?

将stringstream内容写入到stream中

我目前使用std::ofstream如下: std::ofstream outFile; outFile.open(output_file); 然后,我尝试将std::stringstream对象传递给outFile ,如下所示: GetHolesResults(…, std::ofstream &outFile){ float x = 1234; std::stringstream ss; ss << x << std::endl; outFile << ss; } 现在我的outFile除了垃圾outFile什么也没有包含:“0012E708”全部重复。 在GetHolesResults我可以写 outFile << "Foo" << std:endl; 它会在outFile正确输出。 任何build议我做错了什么?