我想从长度为var a =[
"https://www.example.com",
"http://www.example.com",
"www.example.com",
"example.com",
"http://blog.example.com",
"http://www.example.com/product",
"http://www.example.com/products?id=1&page=2",
"http://www.example.com#up",
"https://www",
"https://www.",
"https://www.exampledomain",
"https://www.axiamed.com",
"https://www.axiamed.com/independent-software-vendors/",
];
a.forEach(function(url) {
var result =/^(http:\/\/www\.|https:\/\/www\.)[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/.test(url);
if(result){
console.log(url+" TRUE");
}
else{
console.log(url+" FALSE")
}
});
的{{1}}中包含的序列化数据中创建长度为std::vector<T>
的{{1}},而不在不必要时不复制数据(这可能不是例如,可能需要对齐len
)。
换句话说,我正在寻找以下代码的优化,并在相同的保证下运行:
std::vector<char>
其中
len * (sizeof T)
调用中复制所有字节是否有标准方法或可移植库来实现这一目标(或“足够好”的近似值)?
说明:
T
是可复制的,并且输入template<typename T>
auto copyStuff(std::vector<char>&&input) {
std::vector<T> result;
result.resize(input.size()/(sizeof T));
for (int i=0; i < result.size(); i++) {
memcpy(&result[i], &input[i * (sizeof T)], sizeof T);
}
return result;
}
的布局只是我要构造的项的内存表示的串联。 / li>
memcpy
)。答案 0 :(得分:4)
如果不复制,则不可能从另一种类型中获取一种类型的向量。
通过首先构建T
(足够大)的向量,然后将序列化的数据直接写到该向量上而不使用chars的中间向量,可以避免一组副本。
一些警告:
T
必须是可复制的类型。