Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

4
C ++ 11基于范围的循环:通过值或引用const获取项目
读取基于范围环的一些例子他们建议两种主要方式1,2,3,4 std::vector<MyClass> vec; for (auto &x : vec) { // x is a reference to an item of vec // We can change vec's items by changing x } 要么 for (auto x : vec) { // Value of x is copied from an item of vec // We can …
215 c++  c++11 

4
C ++遍历地图
我想遍历中的每个元素而map<string, int>又不知道其任何string-int值或键。 到目前为止,我有: void output(map<string, int> table) { map<string, int>::iterator it; for (it = table.begin(); it != table.end(); it++) { //How do I access each element? } }
215 c++  dictionary 

11
如何以二进制形式打印(使用cout)数字?
我正在上一本关于操作系统的大学课程,我们正在学习如何从二进制转换为十六进制,从十进制转换为十六进制,等等。今天,我们刚刚学习了如何使用二进制补码(〜number)将有符号/无符号数字存储在内存中。 +1)。 我们有两个练习在纸上做,我希望能够在将作业提交给老师之前验证我的答案。我为前几个练习编写了一个C ++程序,但现在我对如何验证以下问题的答案感到困惑: char a, b; short c; a = -58; c = -315; b = a >> 3; 我们需要显示的二进制表示在内存中的a,b和c。 我已经在纸上做完了,它给了我以下结果(所有二进制表示形式都存储了两个补数之后的数字): a = 00111010(这是一个字符,所以1个字节) b = 00001000(这是一个字符,所以1个字节) c = 11111110 11000101(很短,所以2个字节) 有没有办法验证我的答案?在C ++中是否有一种标准的方法可以显示数字在内存中的二进制表示形式,还是我必须自己对每个步骤进行编码(计算二者的补码,然后转换为二进制)?我知道后者不会花很长时间,但是我很好奇是否有标准的方法可以这样做。

4
osx上的.so和.dylib有什么区别?
.dylib是OSX上的动态库扩展,但是当我不能/不应该使用传统的unix .so共享库时,对我来说还不清楚。 我有一些问题: 从概念上讲,.so和.dylib之间的主要区别是什么? 什么时候可以/应该在另一个上使用? 编译技巧和窍门(例如,替换gcc -shared -fPIC,因为它在osx上不起作用)
214 c++  c  macos  unix 

11
使用epsilon比较双零
今天,我浏览了一些C ++代码(由其他人编写),发现了这一部分: double someValue = ... if (someValue < std::numeric_limits<double>::epsilon() && someValue > -std::numeric_limits<double>::epsilon()) { someValue = 0.0; } 我试图弄清楚这是否有意义。 文档epsilon()说明: 该函数返回1与大于1的最小值之间的差,该差可表示[双精度数]。 这是否也适用于0,即epsilon()最小值是否大于0?或者在其间数0和0 + epsilon可以由代表double? 如果不是,那么比较不等于someValue == 0.0?
214 c++  double 

3
什么是C ++中的<=>运算符?
当我试图了解C ++运算符,我偶然发现了一个奇怪的比较操作上cppreference.com,*在一个看起来像这样的表: 我想:“好吧,如果它们是C ++中的常用运算符,我最好学习它们。” 但是我为阐明这个奥秘所做的所有尝试都没有成功。即使在这里,在Stack Overflow上我也没有运气。 &lt;=&gt;和C ++之间是否有连接? 如果有的话,这个运算符的作用是什么? *同时,cppreference.com更新了该页面,现在包含有关&lt;=&gt;运算符的信息。


10
静态const vs #define
使用static constvars比使用#define预处理器更好吗?还是取决于上下文? 每种方法的优点/缺点是什么?
212 c++  c  const 

22
是std :: vector比纯数组慢得多吗?
我一直认为这std::vector是“作为数组实现” 的一般常识,等等等等。今天我去测试了它,但事实并非如此: 以下是一些测试结果: UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds The whole thing completed in 26.591 seconds 大约慢了3到4倍!对于“ vector可能会慢一些纳秒”的注释并没有真正的道理。 和我使用的代码: #include &lt;cstdlib&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;boost/date_time/posix_time/ptime.hpp&gt; #include &lt;boost/date_time/microsec_time_clock.hpp&gt; class TestTimer { public: TestTimer(const std::string &amp; name) : name(name), …
212 c++  arrays  performance  stl  vector 

17
在函数中返回数组
我有一个int arr[5]传递给函数的数组fillarr(int arr[]): int fillarr(int arr[]) { for(...); return arr; } 如何返回该数组? 我将如何使用它,说我返回了一个指针,我将如何访问它?

13
为什么C ++ STL如此大量地基于模板?(而不是在* interfaces *上)
我的意思是,除了它的专有名称(标准模板库)之外... C ++最初打算将OOP概念呈现到C中。也就是说,您可以根据其类和类层次结构来判断特定实体可以做什么和不可以做什么(无论它如何执行)。由于多重继承的问题,某些能力组合很难用这种方式描述,而且C ++以某种笨拙的方式(与Java等相比)支持接口的概念,但是它确实存在(并且可能是改进)。 然后,模板与STL一起发挥作用。STL似乎采用了经典的OOP概念,并使用模板来冲洗它们。 在使用模板来泛化类型的情况之间应该有所区别,其中类型主题与模板的操作无关(例如,容器)。有一个vector&lt;int&gt;完美的意义。 但是,在许多其他情况下(迭代器和算法),模板化类型应遵循“概念”(输入迭代器,正向迭代器等),其中概念的实际细节完全由模板的实现定义函数/类,而不是模板使用的类型的类,这在某种程度上是对OOP的反使用。 例如,您可以告诉函数: void MyFunc(ForwardIterator&lt;...&gt; *I); 更新:由于原始问题尚不清楚,因此可以将ForwardIterator本身进行模板化以允许任何ForwardIterator类型。相反,将ForwardIterator作为概念。 仅通过查看其定义就可以期待一个正向迭代器,您需要在其中查看实现或以下文档: template &lt;typename Type&gt; void MyFunc(Type *I); 我可以支持使用模板的两个主张:通过为每种使用的类型量身定制模板,而不是使用vtable,可以使编译后的代码更高效。模板可以与本机类型一起使用的事实。 但是,我正在寻找一个更深层的原因,为什么放弃传统的OOP来支持使用STL?(假设您读到了这么远:P)
211 c++  oop  templates  stl 





By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.