标签: c++-standard-library

如何将std :: string转换为小写?

我想将a转换std::string为小写.我知道这个函数tolower(),但是在过去我遇到了这个函数的问题,并且它很难理想,因为使用a std::string会需要迭代每个字符.

有没有一种方法可以100%的时间运作?

c++ string c++-standard-library tolower

736
推荐指数
12
解决办法
83万
查看次数

"STL"和"C++标准库"之间有什么区别?

有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.

(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).

C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.

(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.

我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?

c++ stl std c++-faq c++-standard-library

432
推荐指数
5
解决办法
9万
查看次数

C++ valarray与矢量

我很喜欢矢量.他们很快,很快.但我知道这个叫做valarray的东西存在.为什么我会使用valarray而不是矢量?我知道valarray有一些语法糖,但除此之外,它们什么时候有用?

c++ stl stdvector c++-standard-library valarray

152
推荐指数
8
解决办法
5万
查看次数

迭代时从STL集中删除元素

我需要浏览一个集合并删除符合预定义条件的元素.

这是我写的测试代码:

#include <set>
#include <algorithm>

void printElement(int value) {
    std::cout << value << " ";
}

int main() {
    int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    std::set<int> numbers(initNum, initNum + 10);
    // print '0 1 2 3 4 5 6 7 8 9'
    std::for_each(numbers.begin(), numbers.end(), printElement);

    std::set<int>::iterator it = numbers.begin();

    // iterate through the set and erase all even numbers
    for (; it != numbers.end(); ++it) {
        int n = *it; …
Run Code Online (Sandbox Code Playgroud)

c++ iterator std set c++-standard-library

140
推荐指数
4
解决办法
9万
查看次数

编写自己的STL容器

是否应该编写一个与任何STL容器一样的新容器?

c++ stl c++-standard-library

114
推荐指数
3
解决办法
5万
查看次数

libc ++中短字符串优化的机制是什么?

这个答案给出了短字符串优化(SSO)的一个很好的高级概述.但是,我想更详细地了解它在实践中是如何工作的,特别是在libc ++实现中:

  • 为了符合SSO资格,字符串有多短?这取决于目标架构吗?

  • 在访问字符串数据时,实现如何区分短字符串和长字符串?它m_size <= 16是一个简单的,还是一个标志,是其他成员变量的一部分?(我想这m_size或其中的一部分也可能用于存储字符串数据).

我专门针对libc ++问了这个问题,因为我知道它使用SSO,甚至在libc ++主页上也提到过.

以下是查看来源后的一些观察结果:

libc ++可以使用两个稍微不同的字符串类内存布局进行编译,这由_LIBCPP_ALTERNATE_STRING_LAYOUT标志控制.这两种布局还区分了little-endian和big-endian机器,这使我们总共有4种不同的变体.我将在下面的内容中假设"正常"布局和小端.

假设进一步size_type是4个字节并且value_type是1个字节,这就是字符串的前4个字节在内存中的样子:

// short string: (s)ize and 3 bytes of char (d)ata
sssssss0;dddddddd;dddddddd;dddddddd
       ^- is_long = 0

// long string: (c)apacity
ccccccc1;cccccccc;cccccccc;cccccccc
       ^- is_long = 1
Run Code Online (Sandbox Code Playgroud)

由于短字符串的大小在高7位,因此在访问它时需要移位:

size_type __get_short_size() const {
    return __r_.first().__s.__size_ >> 1;
}
Run Code Online (Sandbox Code Playgroud)

类似地,长字符串容量的getter和setter用于__long_mask解决这个问题is_long.

我仍在寻找我的第一个问题的答案,即__min_cap短字符串的容量对不同的架构有什么价值?

其他标准库实现

这个答案很好地概述了std::string其他标准库实现中的内存布局.

c++ string optimization c++-standard-library libc++

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

如何使用C ++ 17获得以字节为单位的文件大小

我应该知道,特定操作系统是否存在陷阱?

有很多重复(12345这个问题),但他们在几十年前进行了解答。在许多这些问题中,投票率很高的答案今天是错误的。

.sx上其他(旧质量检查)的方法

  • stat.h(wrapper sprintstatf),使用syscall

  • tellg(),根据定义返回一个位置,不一定返回bytes。返回类型不是int

c++ filesize c++-standard-library c++17

93
推荐指数
2
解决办法
6026
查看次数

为什么libc ++的vector <bool> :: const_reference不是bool?

第23.3.7节vector<bool>[vector.bool]第1段规定:

template <class Allocator> class vector<bool, Allocator> {
public:
    // types:
    typedef bool              const_reference;
    ...
Run Code Online (Sandbox Code Playgroud)

但是,当使用libc ++时,此程序无法编译:

#include <vector>
#include <type_traits>

int
main()
{
    static_assert(std::is_same<std::vector<bool>::const_reference, bool>{}, "?");
}
Run Code Online (Sandbox Code Playgroud)

此外,我注意到C++标准在本规范中一直与C++ 98一致.我还注意到自从第一次引入libc ++以来,libc ++一直没有遵循这个规范.

这种不合格的动机是什么?

c++ vector c++-standard-library libc++ std-bitset

91
推荐指数
1
解决办法
4797
查看次数

现代C++的实验性功能是否可靠用于长期项目?

我有一个目前使用C++ 11/14的项目,但它需要类似的东西std::filesystem,它只在C++ 17中可用,因此我没有机会当前使用它.但是,我看到它在我当前的编译器中可用std::experimental::filesystem.使用实验性功能是一个好主意,假设我将来可以添加如下内容:

#ifdef CXX17 //if this is C++17
std::filesystem::something ...;
#else
std::experimental::filesystem::something ...;
#endif
Run Code Online (Sandbox Code Playgroud)

我担心的是:

1.是否保证所有兼容编译器具有相同的实验功能?

2.实验性特征是否容易发生重大变化,使其不可靠?

也许还有更多值得关注的事情.我为什么要或不应该使用它们?我对一个新项目感到困惑,不知道该决定什么.

c++ portability c++-standard-library c++11 c++17

84
推荐指数
4
解决办法
9305
查看次数

std :: lexical_cast - 有这样的事吗?

C++标准库是否定义了此函数,还是必须使用Boost?

我搜索网络除了Boost之外找不到任何东西,但我想我最好问一下这里.

c++ parsing casting std c++-standard-library

72
推荐指数
5
解决办法
5万
查看次数