相关疑难解决方法(0)

在std :: string的上下文中首字母缩略词SSO的含义

关于优化和代码风格的C++问题中,在优化副本的上下文中,有几个答案提到了"SSO" std::string.在这种情况下,SSO意味着什么?

显然不是"单点登录"."共享字符串优化",或许?

c++ string optimization

141
推荐指数
3
解决办法
2万
查看次数

是否在GCC 4.x/C++ 11中重新计算了std :: string?

std::string使用gcc 4时引用计数-std=c++0x-std=c++11

c++ gcc stdstring c++11

34
推荐指数
3
解决办法
1万
查看次数

为什么C++不支持堆栈上的动态数组?

在C99这是合法的:

void f(size_t sz) {
    char arr[sz];
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是,这个 - 动态大小的堆栈数组 - 已经在C++中被删除了,而没有在C++ 11中看到返回.

AFAIK C++是在考虑到C兼容性的情况下制作的,所以我想知道必须有一些非常好的论据,不包括这个有用的功能,对吗?

我能想到的就是:

优点

  • 允许更智能的阵列大小需要在堆栈上(临时缓冲区?),从而节省内存.
  • 减少"智能指针"(或更糟糕的是,手动错误引入delete [])和慢堆分配.
  • 与C99的兼容性.

缺点

  • 允许人们在堆栈上轻松分配过大的数组,从而产生难以调试的堆栈溢出.
  • 编译器编写者更复杂.

那么,为什么他们在导入其他C99功能时没有包含它?


为了防止这种情况被关闭为"主观"或"不具有建设性",我正在寻找来自委员会成员的引用或者讨论谈论此事的讨论的链接 - 当然还有快速的SO综述的奖励积分.

而不是将其视为小马与仓鼠的讨论,将其视为一个历史问题,仅仅关注所考虑的优势和劣势(如果有的话).


编辑:正如James McNellis在下面的评论中所指出的,C++标准化可变长度数组之前存在C++.你可能会把我的问题读作:" 为什么没有,他们不会添加它? ".

c++ standards stack dynamic-arrays

30
推荐指数
1
解决办法
6865
查看次数

是否可以比使用hashmap更快地将字符串映射到int?

我知道我不应该优化我的程序的每一个位置所以请认为这个问题是"学术的"

我有每个最多100个字符串和整数,类似的东西:

MSFT 1
DELL 2
HP   4
....
ABC  58
Run Code Online (Sandbox Code Playgroud)

这个集合是预先初始化的,这意味着一旦创建它就永远不会改变.初始化set后我使用它非常密集,所以很快就能快速查找.字符串很短,最多30个字符.映射int也是有限的,介于1和100之间.

至少知道字符串是预先初始化的并且永远不会改变它应该可以"找到"导致"一篮子一项"映射的哈希函数,但可能还有其他黑客.

我能想象的一个优化 - 我只能读取第一个符号.例如,如果"DELL"是唯一以"D"开头的字符串,并且我收到了类似"D***"的内容,而不是我甚至不需要阅读字符串!它显而易见地"戴尔".这种查找必须比"hashmap lookup"快得多.(在这里,我假设我们只接收哈希中的符号,但并非总是如此)

我的问题是否有任何可以使用或易于实施的解决方案?我正在使用c ++和boost.

upd我检查并发现,对于我的交易限制,股票代码是12个符号,而不是如上所述的30个符号.然而,其他交换可能允许稍微长一些的符号,因此有一个算法可以继续处理多达20个字符长的代码,这很有意思.

c++ algorithm performance hashmap

27
推荐指数
2
解决办法
7339
查看次数

指针和字符串C++

我在教自己C++,我对指针有点困惑(特别是在下面的源代码中).但首先,我继续向你展示我所知道的内容(然后将代码与此对比,因为我觉得好像存在一些矛盾).

我知道的:

int Age = 30;
int* pointer = &Age;

cout << "The location of variable Age is: " << pointer << endl;
cout << "The value stored in this location is: " << *pointer << endl;
Run Code Online (Sandbox Code Playgroud)

指针保存内存地址.使用间接(取消引用)运算符(*),可以访问存储在指针的内存位置的内容.在本书的代码中,我无法理解......

cout << "Enter your name: ";
string name;
getline(cin, name); //gets full line up to NULL terminating character

int CharsToAllocate = name.length() + 1; //calculates length of string input
                          //adds one onto it to adjust for NULL character
char* CopyOfName = new …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

14
推荐指数
3
解决办法
4万
查看次数

为什么在C++中使用std :: string而不是c风格的字符串?

"一个人应该总是使用std :: string而不是c风格的字符串(char *)"这是几乎所有在这里发布的源代码的建议.虽然建议无疑是好的,但正在解决的实际问题不允许详细阐述原因?建议的方面详细.这个问题是作为占位符.

一个好的答案应该包括以下几个方面(详细):

  1. 为什么要std::string在C++中使用c风格的字符串?
  2. 提到的做法有哪些缺点(如果有的话)#1
  3. 在提到的建议的反面#1是一个好的做法的情况是什么?

c++ string c-strings

11
推荐指数
1
解决办法
6145
查看次数

我在哪里可以找到std :: string的实现

我正在寻找c ++字符串类的代码.它实现了什么标题?

c++ string implementation header

8
推荐指数
1
解决办法
5835
查看次数

c ++ std中的字符串类是如何工作的?

我担心我不知道模板(或C++,真的),但我知道算法和数据结构(甚至一些OOP!:).无论如何,为了使问题更加精确,请考虑我希望成为答案的一部分(其中我不提前知道).

  1. 为什么它被编码为模板?
  2. 模板如何工作?
  3. 它是如何进行内存分配的?
  4. 为什么(不是)比仅仅空终止的char数组更好?

c++ std

8
推荐指数
2
解决办法
6234
查看次数

stl容器是否使用隐式共享?

众所周知,Qt小部件使用隐式共享.所以我对stl容器感兴趣std::vector,也std::string使用隐式共享.

如果不是,为什么?因为它非常有用.

如果答案是肯定的,我们如何确定它?我需要简单的C++ stl程序,它表明stl容器使用隐式共享.复制时不执行深层复制.

c++ stl

8
推荐指数
2
解决办法
1917
查看次数

在堆栈和堆之间动态切换

假设我正在编写一个简单的缓冲类.此缓冲区将充当标准C对象数组的简单包装器.它也应该是向后兼容的,可以使用简单数组作为输入的现有函数.

这里的目标是使这个缓冲区在速度和内存使用方面都很有效.由于堆栈分配总是比堆快,我想将堆栈上的所有内容分配到某个阈值,如果它变大,则在堆上重新分配.如何有效地完成这项工作?

我研究过,显然std :: string做了类似的事情.我只是不确定如何.我所拥有的最接近的解决方案是(伪代码,未编译):

template <typename T, int MinSize>
class Buffer
{
public:

    void Push(const T& t)
    {
        ++_size;

        if (_size > MinSize && _heap == NULL)
        {
            // allocate _heap and copy contents from stack
            // _stack is unused and wasted memory
        }
        else if (_heap != NULL)
        {
            // we already allocated _heap, append to it, re-allocate if needed
        }
        else
        {
            // still got room on stack, append to _stack
        }
    }

    void Pop()
    {
        --_size; …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management

6
推荐指数
1
解决办法
191
查看次数