Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在STL中打印向量集的元素_C++_Vector_Stl_Set - Fatal编程技术网

C++ 无法在STL中打印向量集的元素

C++ 无法在STL中打印向量集的元素,c++,vector,stl,set,C++,Vector,Stl,Set,我是新的STL地图和向量。我试图打印向量集中的元素。最后一个for循环用于打印元素。代码如下: #include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ int arr[]={2,0,2,1,4,3,1,0}; vector<int> v; set< vector<int> > st; //set<int>

我是新的STL地图和向量。我试图打印向量集中的元素。最后一个for循环用于打印元素。代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    int arr[]={2,0,2,1,4,3,1,0};

    vector<int> v;
    set< vector<int> > st;
    //set<int> temp;
    int init=0,fin=0;
    for(int i=0;i<8;++i){
        if(find(v.begin(),v.end(),arr[i])==v.end()){//if(temp.find(arr[i])==temp.end()){
            v.push_back(arr[i]);//temp.insert(arr[i]);

        }
        else{
            st.insert(v);
            v.clear();//temp.clear();
            v.push_back(arr[i]);//temp.insert(arr[i]);
        }

    }
    set<vector<int> >::iterator itr;
    vector<int>::iterator str;
    for(itr=st.begin();itr!=st.end();++itr){
        for(str=itr->begin();str!=itr->end();++str){
            cout<<*str<<" ";
        }
        cout<<endl;
    }
    return 0;

}
#包括
使用名称空间std;
typedef long-long-ll;
int main(){
int arr[]={2,0,2,1,4,3,1,0};
向量v;
设置st;
//设定温度;
int init=0,fin=0;
对于(inti=0;ibegin();str!=itr->end();++str){

cout您的
str
迭代器需要是常量,因为不可能改变集合的元素

vector<int>::const_iterator str;

您的
str
迭代器需要是常量,因为不可能对集合的元素进行变异

vector<int>::const_iterator str;

如果编译器是C++ 11兼容的,而不是<代码>::迭代器ITR;…<代码>,试试这个——它更干净:

  for ( const auto& v : st )
    for ( const auto& i : v )
      cout << i << " ";
for(const auto&v:st)
用于(常数自动和i:v)

如果你的编译器是C++ 11兼容,而不是<代码>::迭代器ITR;…<代码>,试试这个——它更干净:

  for ( const auto& v : st )
    for ( const auto& i : v )
      cout << i << " ";
for(const auto&v:st)
用于(常数自动和i:v)


使用名称空间std;
鼓吹
的站点,尤其是
typedef long long ll;
#include
是应该避免的站点。可以说,这些只是浪费时间。改为阅读这些站点。投资回报率更高。查找“基于范围的循环”.@Jacob因为它什么也没教你。它所教的,是以错误的方式教你的。没有竞争性编程这回事。@Jacob这是浪费时间,因为节省几次击键是完全不相关的-打字不是写代码的地方-思考是。你的可读性差-这更重要nt.鼓吹
使用名称空间std;
的网站,尤其是
typedef long long ll;
#include
是应该避免的网站。可以说,这些只是浪费时间。请阅读这些网站。投资回报率更高。请查阅“基于范围的循环”.@Jacob因为它什么也没教你。它所教的,是以错误的方式教你的。没有竞争性编程这回事。@Jacob这是浪费时间,因为节省几次击键是完全不相关的-打字不是写代码的地方-思考是。你的可读性差-这更重要nt.为什么?我如何知道何时使用常量,何时不使用?@Jacob:,因此不能用于改变元素。@Jacob:阅读我发布的链接中的注释部分。不,并非所有容器都是如此-a
std::set
只是因为值也是键(用于排序),因此不能修改。@Jacob擦除原始元素并插入新元素。只有通过
insert
才能了解集合是否已包含元素。@Jacob:不能(除非使用
mutable
)。也许你需要的是一个不同的容器-例如,
std::map
。为什么?我如何知道何时使用const,何时不使用?@Jacob:,因此不能用于改变元素。@Jacob:阅读我发布的链接中的注释部分。不,这不是对所有容器都适用的-一个
std::set
的特殊之处在于它的值是还有键(用于排序),因此不能修改。@Jacob删除原始项并插入新项。只有通过
insert
,您才能了解集合是否已包含元素。@Jacob:您不能(除非使用
mutable
)。可能您需要的是另一个容器-例如,
std::map
。此处是否需要const?如果我删除它会怎么样?@Jacob“
set
是一个关联容器,其中包含一组已排序的Key类型的唯一对象”如何更改集合中的一个元素并同时保证其唯一性?正确的方法是:删除该元素并尝试重新插入修改后的元素。毕竟,
集合的目的是唯一性。@Jacob你是想学习如何编程还是如何玩代码高尔夫?最小特权原则意味着一切除非需要对其进行变异,否则应为常量。@Jacob如果删除
const
,则不会发生任何事情。这只是一种习惯:“我无意修改
v
I
”。您仍然无法更改元素,因为
v
i
迭代器的类型是常量迭代器。可能您对
const
对象和
const\u迭代器
s感到困惑。常量对象无法修改,但常量迭代器不是常量对象:它们是常量对象的迭代器。因此,这是否使元素暂时在循环内而不是以后成为常量?此处是否需要常量?如果我删除它会怎么样?@Jacob“
set
是一个关联容器,其中包含一组已排序的Key类型的唯一对象”如何更改集合中的一个元素并同时保证其唯一性?正确的方法是:删除该元素并尝试重新插入修改后的元素。毕竟,
集合的目的是唯一性。@Jacob你是想学习如何编程还是如何玩代码高尔夫?最小特权原则意味着一切除非需要对其进行变异,否则应为常量。@Jacob如果删除
const
,则不会发生任何事情。这只是一种习惯:“我无意修改
v
I
”。您仍然无法更改元素,因为
v
i
迭代器的类型是常量迭代器。可能您对
const
对象和
const\u迭代器
s感到困惑。常量对象无法修改,但常量迭代器不是常量对象:它们是常量对象的迭代器。因此,这是否使元素在循环中暂时保持常量,而不是以后?