我需要递归遍历一个目录并删除扩展名为.pdf和.doc的所有文件,我正在设法循环遍历一个目录,但没有设法过滤带有上述文件扩展名的文件.
我的代码到目前为止
#/bin/sh
SEARCH_FOLDER="/tmp/*"
for f in $SEARCH_FOLDER
do
if [ -d "$f" ]
then
for ff in $f/*
do
echo "Processing $ff"
done
else
echo "Processing file $f"
fi
done
Run Code Online (Sandbox Code Playgroud)
我需要帮助才能完成代码,因为我无处可去.
根据cppreference.com size_t
定义的几个标题,即
<cstddef>
<cstdio>
<cstring>
<ctime>
Run Code Online (Sandbox Code Playgroud)
而且,从C++ 11开始,也在
<cstdlib>
<cwchar>
Run Code Online (Sandbox Code Playgroud)
首先,我想知道为什么会这样.这与DRY原则是否相矛盾?但是,我的问题是:
我应该使用上面哪个标题来使用size_t
?它有关系吗?
int arr[] = { 3, 5, 9, 2, 8, 10, 11 };
int arrSize = *(&arr + 1) - arr;
std::cout << arrSize;
Run Code Online (Sandbox Code Playgroud)
我不知道这是如何工作的。所以任何人都可以帮助我解决这个问题。
我的问题主要是关于术语以及如何解释标准。
比较指向对象的不等指针的结果是根据符合以下规则的偏序定义的:
(4.1) 如果两个指针指向同一个数组的不同元素,或者指向其子对象,则要求指向下标较高的元素的指针比较大。
(4.2) 如果两个指针递归地指向同一对象的不同非静态数据成员,或指向此类成员的子对象,则要求后面声明的成员的指针比较大,前提是这两个成员具有相同的访问控制( [class.access]),两个成员都不是零大小的子对象,它们的类也不是联合。
(4.3) 否则,两个指针都不需要比较大于另一个。
我对如何解释(4.3)有点困惑。这是否意味着这
#include <iostream>
int main() {
int x;
int y;
std::cout << (&x < &y);
std::cout << (&x < &y);
}
Run Code Online (Sandbox Code Playgroud)
是...
11
或00
。?
换句话说,我知道(4.3)确实适用于此,但我不确定其含义。当标准说“它可以是 A 或 B”时,这与说“它是未定义的”相同吗?
c++ pointers undefined-behavior comparison-operators language-lawyer
假设你有这个:
struct Foo {
Foo(unsigned int x) : x(x) {}
unsigned int x;
};
int main() {
Foo f = Foo(-1); // how to get a compiler error here?
std::cout << f.x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
是否有可能阻止隐式转换?
我能想到的唯一方法是explicilty提供一个构造函数,int
如果int
是负数,则会产生并产生某种运行时错误,但如果我为此得到编译器错误会更好.
我几乎可以肯定,有一个重复,但我能找到的最接近的是这个问题,而不是为什么允许隐式转换.
我对C++ 11和pre C++ 11解决方案感兴趣,最好是两者兼容.
我一直在寻找一种解决方案来同时写入文件和控制台.我发现了一个很好的解决方案在这里.
当我在C++ 11之前工作时,我不得不对Orbit中Lightness Races的代码进行一些小改动:
#include <iostream>
#include <fstream>
#include <string>
struct OutputAndConsole : std::ofstream
{
OutputAndConsole(const std::string& fileName)
: std::ofstream(fileName.c_str()) // constructor taking a string is C++11
, fileName(fileName)
{};
const std::string fileName;
};
template <typename T>
OutputAndConsole& operator<<(OutputAndConsole& strm, const T& var)
{
std::cout << var;
static_cast<std::ofstream&>(strm) << var;
return strm;
};
Run Code Online (Sandbox Code Playgroud)
它很好地工作除了一个小东西需要困惑我.如果我像这样使用它:
int main(){
OutputAndConsole oac("testLog.dat");
double x = 5.0;
oac << std::endl;
static_cast<OutputAndConsole&>(oac << "foo \n" << x << "foo").operator<<(std::endl);
oac << "foo" << std::endl; …
Run Code Online (Sandbox Code Playgroud) 假设我有两个类,它们的内存布局应该完全相同:
struct A {
int x;
int y;
};
/* possibly more code */
struct B {
int a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
标准中是否有什么可以保证我可以安全地使用static_assert(sizeof(A) == sizeof(B))
?
作为较弱的变体,请考虑
struct C {
int a;
};
static_assert( sizeof(A) >= sizeof(C) ); // can this ever fail?
static_assert( sizeof(A) > sizeof(C) ); // can this ever fail?
Run Code Online (Sandbox Code Playgroud)
这个问题引发了这个问题。我天真地希望不会有任何断言失败,但是可以保证吗?
我试图修复一些使用向量的代码,并且有一些循环看起来像这样:
for (int t=0;t<T;t++){
std::vector<double> vect;
for (int i=0;i<MAX;i++){
double value;
vect.push_back(value);
}
/*....*/
}
Run Code Online (Sandbox Code Playgroud)
我或多或少知道如何通过重复使用相同的向量进行外部迭代来改进这一点,但在这样做时我发现当调用std::vector::clear
"向量容量不能保证改变"时,我实际上希望能够保证容量不要改变 也许我只是误解了cplusplus.com上的内容.但是,我的问题是:
如何在不改变容量的情况下清除矢量?
我应该叫reserve
后clear
,以确保产能一样吗?
PS:为了清楚,我想重写上面的代码
std::vector<double> vect;
vect.reserve(MAX);
for (int t=0;t<T;t++){
for (int i=0;i<MAX;i++){
double value;
vect.push_back(value);
}
/*....*/
vect.clear();
}
Run Code Online (Sandbox Code Playgroud)
即.我仍然希望填充它push_back
,我担心clear()
改变矢量的容量.
有时,c ++默认允许切片可能会令人烦恼。例如
struct foo { int a; };
struct bar : foo { int b; };
int main() {
bar x{1,2};
foo y = x; // <- I dont want this to compile!
}
Run Code Online (Sandbox Code Playgroud)
这将编译并按预期运行!但是,如果我不想启用切片怎么办?
什么是惯用的写法,foo
以至于无法对任何派生类的实例进行切片?
c++ ×9
arrays ×1
bash ×1
equality ×1
equivalence ×1
inheritance ×1
pointers ×1
sizeof ×1
typedef ×1
vector ×1