64,637
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<set>
#include<vector>
using namespace std;
class VectorSetTest
{
public:
VectorSetTest()
{
m_set.insert("Set1");
m_set.insert("Set2");
m_set.insert("Set3");
m_vector.push_back("Vector1");
m_vector.push_back("Vector2");
m_vector.push_back("Vector3");
}
set<string> GetSet(){return m_set;}
vector<string> GetVector() { return m_vector;}
private:
set<string> m_set;
vector<string> m_vector;
};
int main()
{
VectorSetTest testObject;
set<string>::iterator setIter = testObject.GetSet().begin();
vector<string>::iterator vecIter = testObject.GetVector().begin();
cout<<(*setIter).c_str()<<endl;
cout<<(*vecIter).c_str()<<endl;
return 0;
}
set1
[/quote]
未定义的意思是,可能出错,也可能不出错,可能达到你想要的,也可能达不到你想要的。
所以才叫做未定义。[/quote]
对于set,采用迭代器访问其零时变量,总是成功的。
可以说,对于set,其实是defined, 对于vector,是undefined
使用set的临时变量是defined
下面的代码,可以通过迭代器获取到全部的set元素;但是对于vector却不可以
使用set的临时变量是undefined
下面的代码,打开注释掉的两行,只会输出Hello,没有输出1,11,说明是undefined.
但又输出了Hello, undefined中的define? C++大牛们帮忙看看
#include<iostream>
#include<set>
#include<vector>
using namespace std;
template<typename T>
class VectorSetTest
{
public:
VectorSetTest()
{
}
void AddSet(const T& a)
{
m_set.insert(a);
}
void AddVector(const T& a)
{
m_vector.push_back(a);
}
set<T> GetSet(){return m_set;}
vector<T> GetVector() { return m_vector;}
private:
set<T> m_set;
vector<T> m_vector;
};
int main()
{
VectorSetTest<string> testObject;
testObject.AddSet("Hello");
testObject.AddVector("World");
testObject.AddSet("Hello1");
testObject.AddVector("World1");
set<string>::iterator setIter = testObject.GetSet().begin();
vector<string>::iterator vecIter = testObject.GetVector().begin();
// cout<<(*setIter).c_str()<<endl;
// cout<<(*vecIter).c_str()<<endl;
VectorSetTest<int> testObject1;
testObject1.AddSet(1);
testObject1.AddVector(100);
testObject1.AddSet(11);
testObject1.AddVector(1100);
set<int>::iterator setIter1 = testObject1.GetSet().begin();
vector<int>::iterator vecIter1 = testObject1.GetVector().begin();
cout<<*setIter1++<<endl;
cout<<*setIter1<<endl;
cout<<*vecIter1<<endl;
return 0;
}
[/quote]
是否 defined/undefined 你说了不算,标准才是权威。标准说未定义行为就是未定义行为,你找多少个编译器或例子来支持也白搭。劝楼主把精力放在刀刃上,钻研技术也要看清楚方向才行,并不是每一个细节都需要死磕的。
set1
[/quote]
未定义的意思是,可能出错,也可能不出错,可能达到你想要的,也可能达不到你想要的。
所以才叫做未定义。[/quote]
对于set,采用迭代器访问其零时变量,总是成功的。
可以说,对于set,其实是defined, 对于vector,是undefined
使用set的临时变量是defined
下面的代码,可以通过迭代器获取到全部的set元素;但是对于vector却不可以
使用set的临时变量是undefined
下面的代码,打开注释掉的两行,只会输出Hello,没有输出1,11,说明是undefined.
但又输出了Hello, undefined中的define? C++大牛们帮忙看看
#include<iostream>
#include<set>
#include<vector>
using namespace std;
template<typename T>
class VectorSetTest
{
public:
VectorSetTest()
{
}
void AddSet(const T& a)
{
m_set.insert(a);
}
void AddVector(const T& a)
{
m_vector.push_back(a);
}
set<T> GetSet(){return m_set;}
vector<T> GetVector() { return m_vector;}
private:
set<T> m_set;
vector<T> m_vector;
};
int main()
{
VectorSetTest<string> testObject;
testObject.AddSet("Hello");
testObject.AddVector("World");
testObject.AddSet("Hello1");
testObject.AddVector("World1");
set<string>::iterator setIter = testObject.GetSet().begin();
vector<string>::iterator vecIter = testObject.GetVector().begin();
// cout<<(*setIter).c_str()<<endl;
// cout<<(*vecIter).c_str()<<endl;
VectorSetTest<int> testObject1;
testObject1.AddSet(1);
testObject1.AddVector(100);
testObject1.AddSet(11);
testObject1.AddVector(1100);
set<int>::iterator setIter1 = testObject1.GetSet().begin();
vector<int>::iterator vecIter1 = testObject1.GetVector().begin();
cout<<*setIter1++<<endl;
cout<<*setIter1<<endl;
cout<<*vecIter1<<endl;
return 0;
}
set1
[/quote]
未定义的意思是,可能出错,也可能不出错,可能达到你想要的,也可能达不到你想要的。
所以才叫做未定义。
set1
[/quote]
未定义行为不表示它输出的不是期望值或者全部不是期望的值。
set1