在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风格数组一样?
我想使用该类的构造函数将一个大容器从返回值移动到另一个类.如何制定参数以确保它不会被复制?
/* 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)
...?
假设我有一个大量存在的对象,存储关于自身的少量数据,但需要几个更大的函数来自行处理.
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对象是否会导致其方法的副本被复制到内存中?
如果是,那么在避免重复的同时管理类特定(类私有)函数有什么好的选择?
如果没有,你能详细说明一下吗?
这个问题的反面(在列表中找到一个字符串)是如此受欢迎,以至于我无法找到我的问题的答案.
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,但我不知道如何优雅地完成它.谢谢.
我需要使用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 字符?
更新:我已将编码更改为
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) 我需要准确地复制维基百科关于将页面正文中的 [[links]] 转换为打开它们引用的文章的 URL 的行为。
链接语法及其行为(转换)在此处描述。虽然那篇文章只提到了一些非常基本的修改,但我认为这并不是全部。
我尝试搜索 MediaWiki API 参考,但没有找到我正在寻找的特定代码段。有谁对代码足够熟悉,知道我可能在谈论哪个 PHP 函数(大概与编辑/提交相关)?
我正在创建不同长度和方向的向量,并且有一些我无法解释的行为.
我从随机种子开始并声明一个向量:
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++在线文档中收集的内容,分配给连接的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)