标签: standard-library

为什么Swift标准库中的reverse()函数返回ReverseRandomAccessCollection?

现在我已经学会了Swift(达到一个合理的水平),我正试图掌握标准库,但实际上它主要是ελληνικά给我!

所以一个特定的问题:我有一个字符串数组,我可以调用reverse().

let arr = ["Mykonos", "Rhodes", "Naxos"].reverse()
Run Code Online (Sandbox Code Playgroud)

现在天真地我以为我会从中找回一种类型的阵列.(例如Ruby有一个类似的方法,你传递一个数组并返回一个数组)

但arr现在实际上是类型

ReverseRandomAccessCollection<Array<String>>
Run Code Online (Sandbox Code Playgroud)

这实际上是一个符合CollectionType的结构:

public struct ReverseRandomAccessCollection<Base : CollectionType where Base.Index : RandomAccessIndexType> : _ReverseCollectionType
Run Code Online (Sandbox Code Playgroud)

这意味着我可以这样做:

for item in arr {
  print(item)
}
Run Code Online (Sandbox Code Playgroud)

但我不能这样做

print(arr[0])
Run Code Online (Sandbox Code Playgroud)

为什么这样设计成这样?

Swift中的字典也实现了CollectionType,所以我可以这样做:

let dict = ["greek" : "swift sometimes", "notgreek" : "ruby for this example"].reverse()
Run Code Online (Sandbox Code Playgroud)

但字典不像数组一样排序,为什么我可以在dicts上调用reverse()?

奖励积分如果有人能指出我可以阅读的方向并改善我的Swift stdlib foo,Ευχαριστώ!

arrays standard-library swift

19
推荐指数
1
解决办法
7102
查看次数

在C++ 11中实现COW std :: string的可能性

今天我通过了这个问题:C++ 11中COW std :: string实现的合法性

该问题的最多投票答案(35票赞成)说:

这是不允许的,因为根据标准21.4.1 p6,只允许迭代器/引用的失效

- 作为任何标准库函数的参数,将非const basic_string作为参数引用.

- 调用非const成员函数,除了operator [],at,front,back,begin,rbegin,end和rend.

对于COW字符串,调用非const运算符[]将需要复制(并使引用无效),上面的段落不允许这样做.因此,在C++ 11中拥有COW字符串已不再合法.

我想知道这种理由是否有效,因为C++ 03似乎对字符串迭代器失效有类似的要求:

引用basic_string序列元素的引用,指针和迭代器可能会被该basic_string对象的以下用法无效:

  • 作为非成员函数的参数swap()(21.3.7.8),operator >>()(21.3.7.9)和getline()(21.3.7.9).
  • 作为basic_string :: swap()的参数.
  • 调用data()和c_str()成员函数.
  • 调用非const成员函数,除了operator [](),at(),begin(),rbegin(),end()和rend().
  • 除了返回迭代器的insert()和erase()形式之外的任何上述用法之后,第一次调用非const成员函数operator [](),at(),begin(),rbegin(),end ()或rend().

这些与C++ 11的不完全相同,但至少operator[]()在原始答案作为主要理由的部分是相同的.所以我想,为了证明C++ 11中COW std :: string实现的非法性,需要引用其他一些标准要求.需要帮助.


这个SO问题已经停止了一年多,所以我决定将其作为一个单独的问题提出来.如果这不合适,请告诉我,我会找到其他方法来澄清我的疑问.

c++ string standard-library language-lawyer c++11

18
推荐指数
1
解决办法
2132
查看次数

是否有std :: noncopyable(或等效的)?

有一个boost :: noncopyable我在我的库里有我自己的noncopyable类.在最新的C++标准中是否有std :: noncopyable或等效的敲门声?

这是一件小事,但是从这样一个阶级派生出来的意图更加清晰.

c++ standard-library

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

C或C++有标准的正则表达式库吗?

可以?如果是的话,我在哪里可以得到它的文件......如果没有,那么哪个是最好的选择?

c c++ regex standard-library

17
推荐指数
4
解决办法
2万
查看次数

trim不是标准c/c ++库的一部分?

是我还是c或c ++库中没有标准的修剪函数?是否有任何单一功能充当修剪?如果没有,谁能告诉我为什么修剪不是标准库的一部分?(我知道修剪是在提升)

我的修剪代码是

std::string trim(const std::string &str)
{
    size_t s = str.find_first_not_of(" \n\r\t");
    size_t e = str.find_last_not_of (" \n\r\t");

    if(( string::npos == s) || ( string::npos == e))
        return "";
    else
        return str.substr(s, e-s+1);
}
Run Code Online (Sandbox Code Playgroud)

test:cout << trim("\n\r \n\r \n\r \n \n \n文本在这里\n,返回\n\r \n\r \n\r \n"); -edit-我最想知道为什么它不在标准库中,BobbyShaftoe答案很棒.trim不是标准c/c ++库的一部分?

c++ trim standard-library

16
推荐指数
2
解决办法
1万
查看次数

浏览python api的其他方法

它只是我,或python标准库文档是非常难以浏览?

Java有其出色的Javadocs,Ruby有其有用的Ruby-Docs,只有在python中我找不到通过标准库文档导航的好方法.

Epydoc项目,看起来很不错,但是有人知道它是否真的被用在标准库上,所以我们都可以通过它吗?如果没有,人们用来浏览python文档的替代方案是什么.

python documentation standard-library

16
推荐指数
1
解决办法
1727
查看次数

当存在具有相同名称的本地模块时,如何在Python中访问标准库模块?

当文件prog.py与具有相同名称的本地模块(math.py)放在同一目录中时,如何访问标准库模块(比如数学)?

我问这个问题,因为我想创建uncertainties一个可以用作的包

import uncertainties
from uncertainties.math import *
Run Code Online (Sandbox Code Playgroud)

因此,不确定性目录中有一个本地数学模块.问题是我想从不确定性/ __ init__.py访问标准库数学模块.

我不想重命名不确定性.因为这个模块正是用于替换数学模块中的函数(具有处理数值不确定性的等价物).

PS:这个问题与我为执行不确定性计算而编写的模块有关,同时考虑了变量之间的相关性.

python import module standard-library

15
推荐指数
2
解决办法
5647
查看次数

stdio.h在C++中不是标准的?

我知道大多数编译器都允许:

#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)

//和

#include <cstdio>
Run Code Online (Sandbox Code Playgroud)

但有人认为<stdio.h>实际上并不是C++标准.

真的吗?

c++ stdio standard-library

15
推荐指数
2
解决办法
1万
查看次数

浏览前奏的源代码会带来奇怪的现象

我正在寻找定义,seq并遇到了这种奇怪.为什么所有这些函数都有相同/相似的定义?

seq :: a -> b -> b
seq = let x = x in x

inline :: a -> a
inline = let x = x in x    

lazy :: a -> a
lazy = let x = x in x
Run Code Online (Sandbox Code Playgroud)

源代码中有更多此定义.这是怎么回事?

haskell standard-library ghc

15
推荐指数
2
解决办法
475
查看次数

为什么Clang不带标准库头?

我从这个网站下载了Clang 3.6.2,并尝试使用Windows下的Code :: Blocks进行设置.不幸的是,由于它不知道在哪里,它无法编译一个简单的"hello world"程序iostream.

查看安装文件夹,它似乎没有包含标准库.为什么?我怎么得到它?

c++ clang standard-library llvm-clang

15
推荐指数
1
解决办法
7476
查看次数