Почему в этом алгоритме анализа текста / строки существует разница в производительности между Rust VS C ++?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему в этом алгоритме анализа текста / строки существует разница в производительности между Rust VS C ++?

Сообщение Anonymous »

Я получаю очень своеобразные данные транспортных средств на работе в текстовом файле. Файл имеет большую часть данных как пространство разделенные значения (42 столбца,> 1 000 000 строк) ; Иногда есть знаки +/- . Я написал анализатор, чтобы разделить эти строки на вектор удвоения в ржавчине и C ++. Запустили их оба в режиме «-O3») в Windows 10 и WSL. Было ли что -то одноидиоматическое в C ++? Ниже приведена функция узкого места:
реализация ржавчины:
/// Function separates the string of data into vector of vectors of f64 (double)
/// so that the precision is maintained
fn separate_data_to_vec(str_to_convert: &str) -> Vec {
let reader = BufReader::new(str_to_convert.as_bytes());
let mut output_vec: Vec = vec![];

for line in reader.lines() {
let line = line.expect("Coult not read line");
let mut nums_as_strs: Vec = line.split(" ").collect();
nums_as_strs.pop();

let data_nums: Vec = nums_as_strs
.iter()
.map(|v| {
let v: f64 = v.parse().unwrap_or(0.0);
v
})
.collect();
output_vec.push(data_nums);
}

output_vec
}

реализация C ++:
std::vector separate_data_to_vec(std::string &str_to_convert) {
std::istringstream reader(str_to_convert);
std::vector output_vec;

// Tried reserving too but in vain
// output_vec.reserve(2'000'000);

std::string line;
while (std::getline(reader, line)) {
std::stringstream ss(line);
std::vector data_nums;
std::string num_str;

while (std::getline(ss, num_str, ' ')) {
if (num_str.empty()) {
continue;
}
// Tried by removing the try catch -- differences stay
try {
data_nums.push_back(std::stod(num_str));
}
catch (const std::invalid_argument& ia) {
std::cerr

Подробнее здесь: https://stackoverflow.com/questions/755 ... -string-pa
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»