我尝试使用operator []访问const C ++映射中的元素,但此方法失败。 我也试图用“at()”来做同样的事情。 它这次工作。 但是,我找不到有关使用“at()”访问const C ++映射中的元素的任何参考。 “()”是C ++ map中新增的函数吗? 我在哪里可以find更多关于这个的信息? 非常感谢你! 一个例子可能如下: #include <iostream> #include <map> using namespace std; int main() { map<int, char> A; A[1] = 'b'; A[3] = 'c'; const map<int, char> B = A; cout << B.at(3) << endl; // it works cout << B[3] << endl; // it […]
C ++ STL集合数据结构是否具有集合差异运算符?
什么是使用默认构造函数创build的std::vector的capacity() ? 我知道size()是零。 我们能否声明一个默认构造的向量不会调用堆内存分配? 这样就可以用一个分配来创build一个任意保留的数组,比如std::vector<int> iv; iv.reserve(2345); std::vector<int> iv; iv.reserve(2345); 。 假设出于某种原因,我不想在2345年开始size() 。 例如,在Linux(g ++ 4.4.5,kernel 2.6.32 amd64) #include <iostream> #include <vector> int main() { using namespace std; cout << vector<int>().capacity() << "," << vector<int>(10).capacity() << endl; return 0; } 打印0,10 。 这是一个规则,还是STL供应商的依赖?
所以我有一个列表: list<Object> myList; myList.push_back(Object myObject); 我不确定,但我相信这将是数组中的“第0”元素。 有什么function,我可以使用,将返回“myObject”? Object copy = myList.find_element(0); ?
以来 他们都是连续的记忆容器; 特征明智,deque几乎所有的vector,但更多,因为它是更有效的插入在前面。 为什么有人更喜欢std::vector到std::deque ?
我一直是一名embedded式软件工程师,但通常在OSI堆栈的第3层或第2层。 我不是一个硬件人。 我通常总是做电信产品,通常是手机/手机,通常意味着像ARM 7处理器。 现在,我发现自己处于一个更加通用的embedded式世界,在一个小型的初创阶段,我可能会转向“不是那么强大”的处理器(这是主观的一点) – 我无法预测哪一个。 我已经读了很多有关在embedded式系统中使用C ++的STL的争论,并没有明确的答案。 在可移植性方面有一些小的担心,有一些关于代码大小或运行时间的担忧,但是我有两个主要的担忧: 1 – exception处理; 我仍然不确定是否使用它(请参阅embedded式C ++:使用exception吗? ) 2 – 我非常不喜欢embedded式系统中的dynamic内存分配,因为它可能引入的问题。 我通常有一个在编译时静态分配的缓冲池,它只提供固定大小的缓冲区(如果没有缓冲区,系统复位)。 STL当然会做很多的dynamic分配。 现在我必须决定是否使用或放弃整个公司的STL(它将进入一些非常核心的S / W)。 我跳哪个方向? 超级安全和失去了什么构成C + +(imo,它不仅仅是语言定义),也许以后遇到问题,或者不得不添加大量的exception处理,也许现在一些其他的代码? 我很想试试Boost ,但是1)我不确定它是否会移植到我想要使用的每个embedded式处理器上,2)在他们的网站上,他们说他们不保证/推荐它的某些部分对于embedded式系统(特别是FSM,这似乎很奇怪)。 如果我去升压,我们后来发现一个问题….
我对这个答案的评论让我想到了常量和sorting的问题。 我玩了一下,减less了我的问题,这个代码: #include <vector> int main() { std::vector <const int> v; } 不会编译 – 你不能创build一个const int的向量。 显然,我应该知道这一点(在智力上我也是),但是我从来没有必要去创造这样的事情。 然而,对我来说,这似乎是一个有用的构造,我想知道是否有任何方法绕过这个问题 – 我想添加东西到一个vector(或其他),但不应该改变一旦添加。 可能有一些令人难堪的简单解决scheme,但这是我以前从未考虑过的事情。 我可能不应该提到sorting(我可能会问另一个问题,请参阅这个问题的困难)。 我真正的基本用例是这样的: vector <const int> v; // ok (ie I want it to be OK) v.push_back( 42 ); // ok int n = v[0]; // ok v[0] = 1; // not allowed
码: std::vector<int> x{1,2,3,4}; std::array<int, 4> y{{1,2,3,4}}; 为什么我需要双花括号为std ::数组?
我想这是一个简单的问题。 我需要做这样的事情: std::set<int> s1, s2; s1 = getAnExcitingSet(); std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor()); 当然, std::back_inserter不起作用,因为没有push_back 。 std::inserter也需要一个迭代器? 我没有使用std::inserter所以我不知道该怎么做。 有没有人有一个想法? 当然,我的另一个select是使用s2的vector,然后稍后进行sorting。 也许那样更好?
Google的C ++风格指南说:“我们不使用例外”。 风格不提及STL关于exception的使用。 由于STL分配器可能会失败,他们如何处理容器抛出的exception? 如果他们使用STL,调用者如何通知分配失败? 像push_back()或map operator[] STL方法不会返回任何状态码。 如果他们不使用STL,他们使用什么容器实现?