小编Adr*_*ian的帖子

将未知大小的std :: array传递给函数

在C++ 11中,我将如何编写一个采用已知类型但未知大小的std ::数组的函数(或方法)?

// made up example
void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}

// lets imagine these being full of numbers
std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);
Run Code Online (Sandbox Code Playgroud)

在我的搜索过程中,我只找到了使用模板的建议,但这些看起来很混乱(标题中的方法定义),而且我想要完成的内容过多.

是否有一种简单的方法可以实现这一点,就像普通的C风格数组一样?

c++ c++11 stdarray

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

我应该如何编写函数参数来强制执行移动而不是复制?

我想使用该类的构造函数将一个大容器从返回值移动到另一个类.如何制定参数以确保它不会被复制?

/* for the sake of simplicity, imagine this typedef to be global */
typedef std::unordered_map<std::string, unsigned int> umap;

umap foo()
{
    umap m; /* fill with lots of data */
    return m;
}

class Bar
{
public:
    Bar(umap m) : bm(m) { }
private:
    umap bm;
};

Bar myBar(foo()); // run foo and pass return value directly to Bar constructor
Run Code Online (Sandbox Code Playgroud)

以上公式是否会触发相应的行为,或者我是否需要将构造函数的参数指定为rvalue-references,即容器为自己的移动语义做的方式?

public:
    Bar(umap&& m) : bm(m) { }
Run Code Online (Sandbox Code Playgroud)

要么

public:
    Bar(umap&& m) : bm(std::move(m)) { }
Run Code Online (Sandbox Code Playgroud)

...?

c++ parameters move-semantics c++11

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

对于对象的每个实例,方法是否在内存中重复?如果是这样,可以避免这种情况吗?

假设我有一个大量存在的对象,存储关于自身的少量数据,但需要几个更大的函数来自行处理.

class Foo
{
public:
    bool is_dead();

private:
    float x, y, z;
    bool dead;
    void check_self();
    void update_self();
    void question_self();
};
Run Code Online (Sandbox Code Playgroud)

我可以从编译器中获得什么样的行为 - 每个新的Foo对象是否会导致其方法的副本被复制到内存中?

如果是,那么在避免重复的同时管理类特定(私有)函数有什么好的选择?

如果没有,你能详细说明一下吗?

c++ methods shared class

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

如何检查列表中的元素是否在字符串中

这个问题的反面(在列表中找到一个字符串)是如此受欢迎,以至于我无法找到我的问题的答案.

black_list = ["ab:", "cd:", "ef:", "gh:"]

for line in some_file:
    if ":" in line and black_list not in line:
        pass
Run Code Online (Sandbox Code Playgroud)

这显然不起作用.需要在列表上进行一些迭代才能返回true/false,但我不知道如何优雅地完成它.谢谢.

python string if-statement element list

4
推荐指数
1
解决办法
216
查看次数

从 std::string 中提取(第一个)UTF-8 字符

我需要使用PHP 的 mb_strtoupper 函数C++ 实现来模仿维基百科的行为。

我的问题是,我只想向函数提供一个UTF-8 字符,即 std::string 的第一个字符。

std::string s("äbcdefg");
mb_strtoupper(s[0]); // this obviously can't work with multi-byte characters
mb_strtoupper('ä'); // works
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法来检测/返回字符串的第一个 UTF-8 字符?

c++ string utf-8

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

Python中的UnicodeDecodeError同时从英语维基百科中读取UTF-8 sql文件

更新:我已将编码更改为

with open("../data/enwiki-20131202-pagelinks.sql", encoding="ISO-8859-1")
Run Code Online (Sandbox Code Playgroud)

......而且程序现在正在咀嚼文件而没有投诉.也许SQL转储不是UTF-8并且不包含这样的文字,这是我的错误假设.

原版的:

我正在尝试处理维基百科的一个庞大的数据集,即pagelinks.sql文件.

不幸的是,我在阅读文件时遇到以下错误:

(...)
File "c:\Program Files\Python 3.3\lib\codecs.py", line 301, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8 in position 5095: invalid start byte
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

import re

reg1 = re.compile(",0,")
ref_count = 0
with open("../data/enwiki-20131202-pagelinks.sql", encoding="utf8") as infile:
    for line in infile:
        matches = re.findall(reg1, line)
        ref_count += len(matches)

print ("found", ref_count, "references.")
Run Code Online (Sandbox Code Playgroud)

wikipedia utf-8 python-3.x

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

在哪里可以找到将内部 MediaWiki 链接转换为文章 URL 的代码?

我需要准确地复制维基百科关于将页面正文中的 [[links]] 转换为打开它们引用的文章的 URL 的行为。

链接语法及其行为(转换)在此处描述。虽然那篇文章只提到了一些非常基本的修改,但我认为这并不是全部。

我尝试搜索 MediaWiki API 参考,但没有找到我正在寻找的特定代码段。有谁对代码足够熟悉,知道我可能在谈论哪个 PHP 函数(大概与编辑/提交相关)?

article mediawiki wikipedia hyperlink

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

在while循环中调用时,C++随机数相同

我正在创建不同长度和方向的向量,并且有一些我无法解释的行为.

我从随机种子开始并声明一个向量:

srand(time(NULL));
std::vector<Particle> psystem;
Run Code Online (Sandbox Code Playgroud)

以下代码然后创建明显的"随机"向量:

float v[3] = {0};
for(int i = 0; i < vectors; ++i) {
    v[0] = float(rand() % 200 - 100) / 3000;
    v[1] = float(rand() % 200 - 100) / 3000;
    v[2] = float(rand() % 200 - 100) / 3000;
    Particle p(0, 0, 0, v[0], v[1], v[2]);
    psystem.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)

添加的while循环会导致psystem中的所有元素具有相同的精确值(例如,所有元素都具有[0.00345,-0.234,0.00701]):

const float min_length = 0.0174;

float v[3] = {0};
for(int i = 0; i < vectors; ++i) {
    while(sqrt(v[0]*v[0] + v[1]*v[1] + …
Run Code Online (Sandbox Code Playgroud)

c++ random while-loop

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

可以替换std :: thread对象吗?

根据我在C++在线文档中收集的内容,分配给连接的std :: thread对象应该调用它的析构函数并表示合法的操作.是这样的吗?

这里有一些例子来说明我的意思:

#include <thread>
#include <vector>

using namespace std;

int main()
{
    vector<thread> tvec;
    for(int = 0; i < 3; ++i)
    {
        tvec.push_back(thread(foo));
    }
    for(size_t i = 0; i < 3; ++i)
    {
        tvec[i].join();
        tvec[i] = thread(foo); // is this ok?
    }
    for(auto& t : tvec)
    {
        t.join();
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ variable-assignment stdthread

0
推荐指数
1
解决办法
305
查看次数