2

我试图从一组向量中打印出每个向量中的所有元素。构建失败,但错误发生在头文件的某处,恐怕我根本不了解错误代码。任何帮助将不胜感激!这是错误:

error: invalid conversion from 'const std::basic_string<char, std::char_traits<char>, std::allocator<char> >* const' to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >*'

这是导致问题的代码。

multiset<vector < string > > setOfRules;
vector<string> testing,testing2;

testing.push_back("bar");
testing.push_back("foo");
testing2.push_back("foo2");
testing2.push_back("bar2");
setOfRules.insert(testing);
setOfRules.insert(testing2);

for (multiset< vector <string > >::iterator myIterator = setOfRules.begin();
     myIterator!=setOfRules.end(); 
     ++myIterator) 
{

    for (vector< string >::iterator myOtherIterator = ( *myIterator ).begin(); 
         myOtherIterator != ( *myIterator ).end(); 
         ++myOtherIterator) 
    {
        cout << *myOtherIterator << " " ;
    }
    cout << endl;
}
4

3 回答 3

6

C++11 标准声称对于值类型与键类型相同的关联容器,迭代器和 const_iterator 都是常量迭代器

原来如此multiset<vector<string>>::iteratorconst_iterator迭代器的技巧相同std::set——它们都是常量。

这意味着该vector<string>::iterator myOtherIterator = *myIterator.begin()语句将失败,因为您尝试从const对象(由which is给出)获取非常量迭代器。*myIteratorconst

要修复,您需要使用vector<string>::const_iterator

for(multiset<vector<string>>::const_iterator myIterator = setOfRules.begin(); 
    myIterator != setOfRules.end(); ++myIterator)
{
   for(vector<string>::const_iterator myOtherIterator = *myIterator.begin();     
      myOtherIterator != *myIterator.end(); ++myOtherIterator)
   {
      cout << *myOtherIterator << " ";
   }
   cout << endl;
}
于 2012-09-10T20:24:23.417 回答
1

我的猜测,这只是一个猜测,因为你没有显示所有需要知道的代码,是你使用了错误的迭代器类型。它似乎基于编译器呕吐物,您需要使用 const_iterator 因为您的对象是常量。

您不能分配给关联容器(如多重集)的关键部分。这意味着您的向量是常量。你需要 const iterator 来迭代它。

多重集似乎是非常量的。您不需要 const 迭代器来导航它。它包含的值类型的 const 特性将防止分配给键。

于 2012-09-10T20:01:34.967 回答
1

有一个平原multiset<XXX>::iterator myIterator是错误的,因为如果你这样做, *myIterator = ...;那么你就会破坏多重集。

const_iterator改为使用

for (multiset< vector <string > >::const_iterator myIterator = setOfRules.begin(); myIterator!=setOfRules.end(); ++myIterator) {
于 2012-09-10T20:10:08.250 回答