Templated bubblesort
Templated bubblesort
本文关键字:bubblesort Templated 更新时间:2023-10-16
我只想制作一个简单的气泡排序,它将与任何容器一起使用:list,vector ...
template<typename T>
void simpleSort(T& container){
for(typename T::iterator iterA = container.begin(); iterA != container.end(); ++iterA){
for(typename T::iterator iterB = iterB; iterB != container.end(); ++iterB){
if(*iterA > *iterB){
typename T::value_type temp{*iterA};
*iterA = *iterB;
*iterB = temp;
}
}
}
}
int main(){
vector<int> a = {10, 4, 66, 2, 444};
simpleSort(a);
for_each(a.begin(),a.end(), [](int i) {cout << i << endl;});
}
//在此处获取分割故障
行:
for(typename T::iterator iterB = iterB; iterB != container.end(); ++iterB){
您将非定位的iTerb分配给iterb而不是值itera。
这应该解决您的问题;并且应该更有效。
template<typename Type>
void simpleSort( Type& container ) {
typename Type::iterator iterA = container.begin();
typename Type::iterator iterB;
for ( ; iterA != container.end(); ++iterA ) {
for ( iterB = iterA; iterB != container.end(); ++iterB ) {
if ( *iterA > *iterB ) {
/*typename Type::value_type temp { *iterA };
*iterA = *iterB;
*iterB = temp;*/
std::iter_swap( iterA, iterB );
}
}
}
}
正如他的回答中提到的Soronelhaetir;您正在将iterB
初始化为已经不可原始化的。通过访问无效的迭代索引,这可能会导致UB和分割故障。同样,以上内容使这里更加有效的是,我从第一个循环中删除了iterA
的声明,并仅初始化了一次,而不是每次在for for for中进行检查。
相关文章:
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- 具有"templated"返回类型和参数的函数指针
- std::value templated 方法的函数使用 clang 和 g++ 进行编译,但不使用 msvc 进行编译
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- Templated Variables Bug With Lambdas in Visual Studio?
- Iterative bubblesort
- 模板调用函数错误 - 没有用于调用'bubbleSort'的匹配函数
- Templated bubblesort
- Templated snprintf
- 使用BubbleSort对数组进行排序
- Bubblesort违反了访问
- C++11 非模板化基类中的纯虚拟'templated'返回类型
- 数组类 BubbleSort 从文件中读入
- 当在另一个类中使用Templated类实例作为成员变量时,需要类型说明符
- 调用"BubbleSort"没有匹配函数
- 我如何实现bubblesort以及在哪里实现
- C++动态分配数组,Bubblesort+Finding Average
- 生成半排序BubbleSort
- 用于原始指针上的迭代器和unique_ptrs上的迭代器的Templated函数
- 在类外部定义"templated class"函数