make_pair和大括号{}之间的区别,以便在C ++中分配对?

时间:2018-09-08 14:24:36

标签: c++ std-pair

我没有找到回答这个问题的人,以下内容之间是否有区别:

v.push_back({x, y});

和:

v.push_back(make_pair(x, y));

假设v是这样声明的:

vector<pair<int,int> > v;

3 个答案:

答案 0 :(得分:3)

我想您可能很快就接受了这个答案。普遍接受的方法是这样的:

node_modules/lottie-react-native

如果您查看Godbolt,您会发现它可以内联所有内容(可能是您想要的,也可能不是):

https://godbolt.org/z/aCl02d

在Wandbox上运行它:

https://wandbox.org/permlink/uo3OqlS2X4s5YpB6

代码:

react-native link lottie-react-native

输出:

@objc func updateProgress(){
    let duration = Float((player.currentItem?.duration.seconds)!)
    let currentTime = Float((player.currentItem?.currentTime().seconds)!)
    let progressTotal = currentTime/duration

    let indexPath = IndexPath(row: self.tag, section: 0)
    if progressTotal > 0 {
        if let cell = tableView.cellForRow(at: indexPath) as? PostTableViewCell {
            cell.progressBar.progress = progressTotal
            cell.progressBar.progressTintColor = UIColor.blue
        } else {
            timer?.invalidate()
            if timer != nil {
                timer?.invalidate()
                timer = nil
                print("Timer Stopped")
            }
        }
    }
}

当然,如果您预先在向量中保留适当数量的元素,则一切运行都会更快。也许那是提出这个问题的人真的要你说。

答案 1 :(得分:1)

我在一个在线编译器中进行了尝试,据我所知,make_pair的优化程序集与{}语法相同。

https://godbolt.org/z/P7Ugkt

答案 2 :(得分:0)

{x, y}中的

v.push_back({x, y})v的{​​{1}}中的aggregate initialization (since C++11),而value_type是创建函数并且std::make_pair从其参数推导出的类型。

std::pairpush_back({x, y})的一个优势是,您可以像这样使小型结构简单(没有构造函数):

emplace_back(x, y)

Example