使用C ++从文件读取到单个内存块

时间:2017-06-29 12:07:15

标签: c++ memory-management file-io ifstream getline

我有一个只包含一行的ASCII文件。我想将整行加载到fileprivate func handleNotification(data: [AnyHashable : Any]) { guard let topic = data["topic"] as? String else { return } if data["receiver"] as? String == UserManager.shared.current(Profile.self)?.uuid && topic == "coupons" { displayNotification(data: data) } } fileprivate func displayNotification(data: [AnyHashable : Any]) { if #available(iOS 10.0, *) { let content = UNMutableNotificationContent() content.title = data["notification_title"] as! String content.body = data["notification_body"] as! String let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 1, repeats: false) let request = UNNotificationRequest.init(identifier: data["topic"] as! String, content: content, trigger: trigger) UNUserNotificationCenter.current().add(request) } else { if currentNotification != nil { UIApplication.shared.cancelLocalNotification(currentNotification!) } let notification = UILocalNotification() notification.fireDate = Date() notification.category = data["topic"] as? String notification.alertBody = data["notification_body"] as? String if #available(iOS 8.2, *) { notification.alertTitle = data["notification_title"] as? String } currentNotification = notification UIApplication.shared.scheduleLocalNotification(currentNotification!) } } 对象中。在执行此操作时,我希望将整个char数组放入单个连续的内存块中。这样做的最佳方式是什么?

目前,我按如下方式阅读整个文件:

std::string

如果我按照以下方式进行操作,那么字符串也会放在一个内存块中吗?

std::ifstream t(fname);
std::string pstr;

t.seekg(0, std::ios::end);
pstr.reserve(t.tellg());
t.seekg(0, std::ios::beg);

pstr.assign(std::istreambuf_iterator<char>(t),
            std::istreambuf_iterator<char>());

如果两种方式都能提供所需的功能,那么首选哪一种?

1 个答案:

答案 0 :(得分:2)

  

如果我按照以下方式进行操作,那么字符串也会放在一个内存块中吗?

是的,两种方法都可以。

  

如果两种方式都能提供所需的功能,那么首选哪一种?

应首选第一个,以避免重复(重新)分配目标std::string。使用std::back_inserter会更加惯用。