c ++:通过多个向量迭代

时间:2012-09-10 19:59:03

标签: c++ vector iterator multiset

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

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;
}

3 个答案:

答案 0 :(得分:6)

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

实际上multiset<vector<string>>::iterator实际上是const_iterator。与std::set迭代器相同的技巧 - 它们都是有效的。

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

要解决此问题,您需要使用const

vector<string>::const_iterator

答案 1 :(得分:1)

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

您无法分配关联容器的关键部分(如multiset)。这意味着你的向量是常量。你需要const迭代器来迭代它。

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

答案 2 :(得分:1)

有一个普通的multiset<XXX>::iterator myIterator是错误的,因为如果你这样做了 *myIterator = ...;然后你就会破坏多重集。

使用const_iterator代替

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