2012-02-13 62 views
1

我试图做一个向量,该向量持有指向向量字符串向量中的每个第一个字符串的指针。我将通过first_words_in_subvecs\bin\sort程序来排序/打印它们。我想这是浪费cpu时间/空间来创建一个新的实际字符串向量,因为我只是要传递它们。我是否认为只是指出我想发送的字符串会更快?为什么这个代码不工作?我没有收到任何警告或错误,但是当我运行它时会出现故障。如何使向量指向另一个子向量中的项目?

int print_sorted_subvectors(vector< vector<string> > &sorted_subsets_vec) 
{ 
    vector<string*> first_words_in_subvecs; 

    for(int i = 0; i < sorted_subsets_vec.size(); i++) 
    { 
     first_words_in_subvecs[i] = &sorted_subsets_vec[i][0]; 
    } 
} 
+1

您了解['std :: sort()'](http://en.cppreference.com/w/cpp/algorithm/sort),对吗? – 2012-02-13 03:52:25

+0

好吧,我现在!这会更容易...我们正在使用fork和bin \ sort来分配任务的另一部分,所以我打算再次使用它,但那会更容易......笨管道......那么我想我将不得不复制而不是指向。但是,这将如何完成?我仍然好奇。 – Marty 2012-02-13 03:57:20

回答

1

可能不需要在向量中存储指向字符串的指针。 std::string类非常高效,它使用写时复制等技术来避免不必要的实际字符串数据副本。如果first_words_in_subvecs是常规的vector<string>(并且您的代码更容易理解且更可靠),那么您可能没有效率问题。

很难说为什么你当前的代码是segfaulting。你确定每个sorted_subsets_vec的子矢量都是非空的吗?

+0

可能就是这样。是否有类似的功能可以通过矢量并告诉你哪个元素最小?我想我真的不需要实际分类。只需要找到最小的元素。 min_element的作品? – Marty 2012-02-13 04:07:18

+0

@FrederickCraine:Yup,['std :: min_element'](http://en.cppreference.com/w/cpp/algorithm/min_element)会做你想做的。这会返回一个迭代器,所以检查'.end()'来查看是否有任何元素(或先检查'.empty()')。 – 2012-02-13 04:34:52

相关问题