Я получаю очень своеобразные данные транспортных средств на работе в текстовом файле. Файл имеет большую часть данных как пространство разделенные значения (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
Почему в этом алгоритме анализа текста / строки существует разница в производительности между Rust VS C ++? ⇐ C++
Программы на C++. Форум разработчиков
1739512321
Anonymous
Я получаю очень своеобразные данные транспортных средств на работе в текстовом файле. Файл имеет большую часть данных как пространство разделенные значения (42 столбца,> 1 000 000 строк) ; Иногда есть знаки +/- . Я написал анализатор, чтобы разделить эти строки на вектор удвоения в ржавчине и C ++. Запустили их оба в режиме «-O3») в Windows 10 и WSL. Было ли что -то одноидиоматическое в C ++? Ниже приведена функция узкого места:
[b] реализация ржавчины: [/b]
/// 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
}
[b] реализация C ++: [/b]
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
Подробнее здесь: [url]https://stackoverflow.com/questions/75520944/why-is-there-performance-difference-between-rust-vs-c-in-this-text-string-pa[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия