Tag: stl

为什么一个C ++向量被称为向量?

这个问题真的很明显。 我隐约地了解math中的向量,但是我并没有真正看到与C ++向量的链接。

如何重用ostringstream?

我想清除和重用一个ostringstream(和底层的缓冲区),这样我的应用程序就不必做很多的分配。 如何将对象重置为初始状态?

相当于C ++的StringBuffer / StringBuilder?

有没有提供有效的string连接function的C ++标准模板库类,类似于C#的StringBuilder或Java的StringBuffer ?

int的最大值

是否有任何代码findC / C + +中的整数的最大值(相应的编译器)像Java中的Integer.MaxValue函数?

std :: for_each over for循环的优点

std::for_each for循环有什么优点吗? 对我来说, std::for_each似乎只是阻碍了代码的可读性。 为什么一些编码标准推荐使用?

为什么std :: map实现为红黑树?

为什么std :: map实现为红黑树 ? 有几个平衡的二叉search树 (BST)。 在select红黑树时,什么是devise权衡?

如何有效地清除std ::队列?

我正在使用std ::队列来实现JobQueue类。 (基本上这个类以FIFO的方式处理每个工作)。 在一种情况下,我想要一次性清除队列(从队列中删除所有作业)。 我在std :: queue类中看不到任何清晰的方法。 如何有效地实现JobQueue类的清除方法? 我有一个简单的解决schemepopup一个循环,但我正在寻找更好的方法。 //Clears the job queue void JobQueue ::clearJobs() { // I want to avoid pop in a loop while (!m_Queue.empty()) { m_Queue.pop(); } }

为什么在C ++ 11中使用非成员的开始和结束函数?

每个标准容器都有一个用于返回该容器迭代器的begin和end方法。 但是,C ++ 11显然引入了称为std::begin和std::end自由函数,它们调用begin和end成员函数。 所以,而不是写作 auto i = v.begin(); auto e = v.end(); 你会写 using std::begin; using std::end; auto i = begin(v); auto e = end(v); 在他的谈话中, Writing Modern C ++ ,Herb Sutter说,当你想要一个容器的开始或结束迭代器时,你应该总是使用自由函数。 但是,他没有详细说明为什么你想要。 看代码,它可以节省你所有的一个字符。 所以,就标准容器而言,免费function似乎完全没有用处。 Herb Sutter表示,对非标准容器有好处,但他没有详细说明。 所以,问题是std::begin和std::end的自由函数版本究竟做了什么,除了调用相应的成员函数版本之外,为什么要使用它们?

我应该存储整个对象还是指向容器中的对象的指针?

从头开始devise一个新的系统。 我将使用STL来存储特定的长寿命对象的列表和地图。 问题:我应该确保我的对象有复制构造函数,并将对象的副本存储在我的STL容器中,还是自己pipe理生命期和范围通常更好一些,只是将指向这些对象的指针存储在我的STL容器中? 我意识到这在细节方面有些短暂,但是如果存在,我正在寻找“理论”更好的答案,因为我知道这两种解决scheme都是可能的。 玩指针的两个非常明显的缺点:1)我必须在STL之外的范围内自己pipe理这些对象的分配/释放。 2)我不能在堆栈上创build一个临时对象并将其添加到我的容器中。 还有什么我失踪?

C ++sorting和跟踪索引

使用C ++,希望是标准库,我想按升序对样本序列进行sorting,但我也想记住新样本的原始索引。 例如,我有一个集合,或向量,或样本matrixA : [5, 2, 1, 4, 3] 。 我想把它们sorting为B : [1,2,3,4,5] ,但是我也想记住值的原始索引,所以我可以得到另一个集合: C : [2, 1, 4, 3, 0 ] – 这对应于原来的'A'中的'B'中的每个元素的索引。 例如,在Matlab中,你可以这样做: [a,b]=sort([5, 8, 7]) a = 5 7 8 b = 1 3 2 任何人都可以看到一个很好的办法做到这一点